private string getRutaDijkstra(DijkstraNode d, ref List <DijkstraNode> caminos) { string ruta = ""; string actualname = d.procedencia.name; List <string> nodos = new List <string>(); nodos.Add(actualname); while (actualname != listaciudades[comboBox1.SelectedIndex].name) { foreach (DijkstraNode d1 in caminos) { if (d1.IdNodo.name == actualname) { actualname = d1.procedencia.name; nodos.Add(actualname); break; } } } for (int x = nodos.Count - 1; x >= 0; x--) { ruta = ruta + nodos[x] + "->"; } ruta = ruta + d.IdNodo.name; return(ruta); }
List <DijkstraNode> Dijkstra(CiudadNodo origen, CiudadNodo destino) { List <DijkstraNode> caminos = new List <DijkstraNode>(); CiudadNodo nodoActual = origen; string Definitivos = ""; int numDef = 0; //Se crea el vector de caminos foreach (CiudadNodo c in listaciudades) { DijkstraNode nodo = new DijkstraNode(c, 1000000000); if (c.getName() == origen.getName()) { nodo.peso = 0; nodo.procedencia = origen; } caminos.Add(nodo); } //*** Se inicia con el origen; Definitivos = origen.getName(); numDef++; //*** while (numDef != listaciudades.Count) { dijskUpdate(ref nodoActual, ref caminos, ref Definitivos); if (Definitivos.Contains(destino.name)) { break; } numDef++; } return(caminos); }
// //***** DIJKSTRA // **** *** *** * * ***** ***** ***** ***** // // * * * * * * * * * * * * * // // * * * * * * * * * * * * * // // * * * * ** * * ***** ***** // // * * * * ** ***** * * * * * // // * * * * * * * * * * * * * // // * * * * * * * * * * * * * * // // **** *** *** * * ***** * * * * * // CiudadNodo dijskUpdate(ref CiudadNodo nodoactual, ref List <DijkstraNode> caminos, ref string Definitivos) { DijkstraNode nuevo = new DijkstraNode(); foreach (DijkstraNode d in caminos) { if (d.IdNodo.name == nodoactual.name) { nuevo.peso = d.peso; break; } } if (checkBoxCosto.Checked) { foreach (AristaCiudad a in nodoactual.Aristas) { foreach (DijkstraNode d in caminos) { if (a.getDest() == d.IdNodo.name) { if ((a.getCosto() + nuevo.peso) < d.peso) { d.peso = a.getCosto() + nuevo.peso; d.AristaPeso = a.getCosto(); d.procedencia = nodoactual; } } } } //fin foreach arista } else ////***Tiempo { foreach (AristaCiudad a in nodoactual.Aristas) { foreach (DijkstraNode d in caminos) { if (a.getDest() == d.IdNodo.name) { if ((a.getTiempo() + nuevo.peso) < d.peso) { d.peso = a.getTiempo() + nuevo.peso; d.AristaPeso = a.getTiempo(); d.procedencia = nodoactual; } } } }//fin foreach arista } caminos.Sort((x, y) => x.peso.CompareTo(y.peso)); foreach (DijkstraNode d in caminos) { if (!Definitivos.Contains(d.IdNodo.name)) { nodoactual = d.IdNodo; break; } } Definitivos = Definitivos + nodoactual.name; ///*** return(nodoactual); }
private string getRutaDijkstra(DijkstraNode d, ref List<DijkstraNode> caminos) { string ruta = ""; string actualname=d.procedencia.name; List<string> nodos=new List<string>(); nodos.Add(actualname); while(actualname != listaciudades[comboBox1.SelectedIndex].name) { foreach(DijkstraNode d1 in caminos) { if (d1.IdNodo.name == actualname) { actualname = d1.procedencia.name; nodos.Add(actualname); break; } } } for(int x = nodos.Count-1; x >= 0; x--) { ruta = ruta + nodos[x] + "->"; } ruta = ruta + d.IdNodo.name; return ruta; }
// //***** DIJKSTRA // **** *** *** * * ***** ***** ***** ***** // // * * * * * * * * * * * * * // // * * * * * * * * * * * * * // // * * * * ** * * ***** ***** // // * * * * ** ***** * * * * * // // * * * * * * * * * * * * * // // * * * * * * * * * * * * * * // // **** *** *** * * ***** * * * * * // CiudadNodo dijskUpdate(ref CiudadNodo nodoactual, ref List<DijkstraNode> caminos, ref string Definitivos) { DijkstraNode nuevo = new DijkstraNode(); foreach (DijkstraNode d in caminos) { if (d.IdNodo.name == nodoactual.name) { nuevo.peso = d.peso; break; } } if(checkBoxCosto.Checked) { foreach (AristaCiudad a in nodoactual.Aristas) { foreach (DijkstraNode d in caminos) { if (a.getDest() == d.IdNodo.name) { if ((a.getCosto() + nuevo.peso) < d.peso) { d.peso = a.getCosto() + nuevo.peso; d.AristaPeso = a.getCosto(); d.procedencia = nodoactual; } } } }//fin foreach arista } else ////***Tiempo { foreach (AristaCiudad a in nodoactual.Aristas) { foreach (DijkstraNode d in caminos) { if (a.getDest() == d.IdNodo.name) { if ((a.getTiempo() + nuevo.peso) < d.peso) { d.peso = a.getTiempo() + nuevo.peso; d.AristaPeso = a.getTiempo(); d.procedencia = nodoactual; } } } }//fin foreach arista } caminos.Sort((x, y) => x.peso.CompareTo(y.peso)); foreach (DijkstraNode d in caminos) { if (!Definitivos.Contains(d.IdNodo.name)) { nodoactual = d.IdNodo; break; } } Definitivos = Definitivos + nodoactual.name; ///*** return nodoactual; }
List<DijkstraNode> Dijkstra(CiudadNodo origen) { List<DijkstraNode> caminos = new List<DijkstraNode>(); CiudadNodo nodoActual=origen; string Definitivos = ""; int numDef=0; //Se crea el vector de caminos foreach (CiudadNodo c in listaciudades) { DijkstraNode nodo = new DijkstraNode(c, 1000000000); if (c.getName()==origen.getName()) { nodo.peso = 0; nodo.procedencia = origen; } caminos.Add(nodo); } //*** Se inicia con el origen; Definitivos = origen.getName(); numDef++; //*** while(numDef != listaciudades.Count) { dijskUpdate(ref nodoActual, ref caminos, ref Definitivos); numDef++; } return caminos; }