public List <Arista> generarCamino(Vertice objetivo) { caminoString = ""; List <Arista> camino = new List <Arista>(); ElementoDijkstra aux = candidatos[objetivo.getID() - 1]; while (aux.getActual().getID() != origen.getID()) { if (aux.getActual() == null || aux.getProveniente() == null) { camino.Clear(); return(camino); } camino.Add(encontrarVertice(aux.getActual(), aux.getProveniente())); aux = candidatos[aux.getProveniente().getID() - 1]; } camino.Reverse(); for (int i = 0; i < camino.Count; i++) { caminoString += camino[i].getOrigen().getID() + " ->"; } caminoString += " " + objetivo.getID(); return(camino); }
private void factible(ElementoDijkstra aux) { int total = 0; for (int i = 0; i < aux.getActual().getLista().Count; i++) { total += aux.getPeso() + aux.getActual().getLista()[i].getPonderacion(); //aux.getActual().getLista()[i] if (total < candidatos[aux.getActual().getLista()[i].getDestino().getID() - 1].getPeso()) { candidatos[aux.getActual().getLista()[i].getDestino().getID() - 1].setPeso(total); candidatos[aux.getActual().getLista()[i].getDestino().getID() - 1].setProveniente(aux.getActual()); } total = 0; } }
public ElementoDijkstra seleccion() { ElementoDijkstra auxiliar = new ElementoDijkstra(infinito + 1, null); int j = -1; for (int i = 0; i < candidatos.Count; i++) { if (!candidatos[i].getDefinitivo()) { if (candidatos[i].getPeso() < auxiliar.getPeso()) { auxiliar = candidatos[i]; j = i; } } } candidatos[j].setDefinitivo(true); return(auxiliar); }
public Dijkstra(Grafo grafo, Vertice origen) { this.grafo = grafo; this.origen = origen; candidatos = new List <ElementoDijkstra>(); infinito = sumarValores(); caminoString = ""; for (int i = 0; i < grafo.getVertices().Count; i++) { ElementoDijkstra dks; if (i != origen.getID() - 1) { dks = new ElementoDijkstra(infinito, grafo.getVertices()[i]); } else { dks = new ElementoDijkstra(0, origen, grafo.getVertices()[i]); } candidatos.Add(dks); } }