/// <summary> /// Construtor padrão /// </summary> /// <param name="pDfs"></param> public LeitorXml() { grafo = new Grafo(); }
public Vertice(int id, String nome, Grafo grafo) { this.Id_v = id; this.Nome = nome; this.Grafo = grafo; }
static void Main(string[] args) { Grafo grafo = null; int i; String op; System.Console.Write(":::::::::: GRAFOS ::::::::::\n\n"); System.Console.Write("1)Dririgido\n2)No dirigido\n3)Salir\n"); op = System.Console.ReadLine(); if (op == "1") { grafo = new Grafo(true); } else if (op == "2") { grafo = new Grafo(false); } while (op != "9") { System.Console.Write(":::::::::: GRAFOS ::::::::::\n\n"); System.Console.Write("1) Agregar Vertice\n2) Agregar Arista\n3) Eliminar Vertice\n4) Eliminar Arista\n"); System.Console.Write("5) Dijkstra\n6) Kruskal\n7) Prim\n8) Floyd\n9) Salir\n"); op = System.Console.ReadLine(); switch (op) { case "1": grafo.agregaV(); System.Console.Read(); break; case "2": if (grafo.numver < 1) { System.Console.Write("No hay vertices, no se puede agregar aristas"); } else { System.Console.Write("Vertices existentes\n\n"); for (i = 0; i < grafo.numver; i++) { System.Console.Write("[" + grafo.verts[i] + "]"); } grafo.agregaA(); } System.Console.Read(); break; case "5": if (grafo.numver == 0) { System.Console.Write("No hay ningun vertice agregado"); } else { if (grafo.numaris == 0) { System.Console.Write("No hay ninguna arista agregada"); } else { grafo.dijkstra(); } } System.Console.Read(); break; } } op = ""; }
private void EncontrarCaminhoMinimo(double[,] matriz, Grafo grafo, string vx, string vy) { var x = grafo.GetVertice(vx); var y = grafo.GetVertice(vy); tbMain.AppendText($"Encontrando caminho do vértice {x} ao vértice {y}..." + Environment.NewLine); List <Vertice> _IN; Vertice p; var d = new double[grafo.Vertices.Count]; var s = new Vertice[grafo.Vertices.Count]; _IN = new List <Vertice>() { x }; d[grafo.GetIndice(x)] = 0; foreach (Vertice z in grafo.Vertices.Where(z => !_IN.Contains(z))) { d[grafo.GetIndice(z)] = matriz[grafo.GetIndice(x), grafo.GetIndice(z)]; s[grafo.GetIndice(z)] = x; } while (!_IN.Contains(y)) { p = grafo.Vertices.Where(z => !_IN.Contains(z)).OrderBy(z => d[grafo.GetIndice(z)]).First(); _IN.Add(p); foreach (Vertice z in grafo.Vertices.Where(z => !_IN.Contains(z))) { var distAnterior = d[grafo.GetIndice(z)]; d[grafo.GetIndice(z)] = Math.Min(d[grafo.GetIndice(z)], d[grafo.GetIndice(p)] + matriz[grafo.GetIndice(p), grafo.GetIndice(z)]); if (!(d[grafo.GetIndice(z)] == distAnterior)) { s[grafo.GetIndice(z)] = p; } } } //exibir if (d[grafo.GetIndice(y)] == Double.PositiveInfinity) { tbMain.AppendText(Environment.NewLine + "Não há caminho entre esses dois vértices."); } else { var caminho = new List <string>(); tbMain.AppendText(Environment.NewLine + "Em ordem inversa, o caminho é:" + Environment.NewLine); tbMain.AppendText(y + Environment.NewLine); var _z = y; caminho.Add(_z.Nome); while (_z != x) { var sz = s[grafo.GetIndice(_z)]; tbMain.AppendText(sz + Environment.NewLine); caminho.Add(sz.Nome); _z = sz; } caminho.Reverse(); tbMain.AppendText(Environment.NewLine + "O caminho, na ordem certa, é:" + Environment.NewLine); caminho.ForEach(v => tbMain.AppendText(v + Environment.NewLine)); tbMain.AppendText(Environment.NewLine + $"A distância do caminho é: {d[grafo.GetIndice(y)]}"); } }