void ActualizaVector(List <ElementoDijktra> Arreglo, ElementoDijktra Menor) { foreach (Arista a in Menor.GetOrigen().getLa()) { foreach (ElementoDijktra e in Arreglo) { if (e.GetOrigen().Equals(a.getVertex())) { if (a.getPond() + Menor.GetDistanciaAcumulada() < e.GetDistanciaAcumulada()) { e.SetDistanciaAcumulada(a.getPond() + Menor.GetDistanciaAcumulada()); e.SetProveniente(Menor); } } } } }
public Dijkstra(Grafo grafo, Vertice Origen, Vertice Destino) { G = grafo; List <ElementoDijktra> ArregloDijkstra = new List <ElementoDijktra>(); List <ElementoDijktra> Desencolados = new List <ElementoDijktra>(); Camino = new List <Vertice>(); foreach (Vertice v in G.getLv()) { ArregloDijkstra.Add(new ElementoDijktra(v)); } foreach (ElementoDijktra v in ArregloDijkstra) { if (v.GetOrigen().Equals(Origen)) { v.SetDistanciaAcumulada(0); } } while (!Solucion(ArregloDijkstra)) { ArregloDijkstra.Sort((x, y) => x.GetDistanciaAcumulada().CompareTo(y.GetDistanciaAcumulada())); ElementoDijktra menor = ArregloDijkstra[0]; ArregloDijkstra.RemoveAt(0); Desencolados.Add(menor); ActualizaVector(ArregloDijkstra, menor); } foreach (ElementoDijktra a in Desencolados) { if (a.GetOrigen() == Destino) { ElementoDijktra Proveniente = a; while (Proveniente != null) { Camino.Add(Proveniente.GetOrigen()); Proveniente = Proveniente.GetProveniente(); } } } }
public ElementoDijktra(Vertice inicio) { Origen = inicio; DistanciaAcumulada = double.PositiveInfinity; Proveniente = null; }
public void SetProveniente(ElementoDijktra Valor) { Proveniente = Valor; }