public void actualiza(DijkstraElementos elemento) { Nodo auxn = g.returnodo(elemento.actual); foreach (Adyacencia a in auxn.La) { for (int i = 0; i < listaDikstra.Count; i++) { if (a.getNodoAd().getCiudad().GetNombreCiudadString() == listaDikstra[i].actual && listaDikstra[i].definitivo == false) { if (radioButtonCOSTO.Checked == true) { //Console.WriteLine(" entro costo"); if (a.getPesoAdy() + elemento.distancia < listaDikstra[i].distancia) { listaDikstra[i].proveniente = elemento.actual; //compara[i].definitiva = true; listaDikstra[i].distancia = a.getPesoAdy() + elemento.distancia; } } if (radioButtonTiempo.Checked == true) { //Console.WriteLine(" entro time"); if (a.getTiempoAdy() + elemento.distancia < listaDikstra[i].distancia) { listaDikstra[i].proveniente = elemento.actual; //compara[i].definitiva = true; listaDikstra[i].distancia = a.getTiempoAdy() + elemento.distancia; } } } } } }
public void actualiza(DijkstraElementos elemento) { Nodo auxn = g.returnodo(elemento.actual); foreach (Adyacencia a in auxn.La) { for (int i = 0; i < listaDikstra.Count; i++) { if (a.getNodoAd().getCiudad().GetNombreCiudadString() == listaDikstra[i].actual && listaDikstra[i].definitivo == false) { if (a.getPesoAdy() + elemento.distancia < listaDikstra[i].distancia) { listaDikstra[i].proveniente = elemento.actual; //compara[i].definitiva = true; listaDikstra[i].distancia = a.getPesoAdy() + elemento.distancia; } } } } }
private void buttonCotizar_Click(object sender, EventArgs e) { ReiniciarTodo(); textBoxTotal.Clear(); listViewRutAS.Items.Clear(); string Nodoinicial = textBoxOrigen.Text; string NodoFinal = textBoxDestino.Text; if (noTieneAdyacentes(Nodoinicial)) { MessageBox.Show("Ese Nodo no tiene adyacentes no se pueden calcular rutas"); } else { foreach (Nodo n in g.listaNodo) { DijkstraElementos Elemento = new DijkstraElementos(n.getCiudad().GetNombreCiudadString()); if (Elemento.actual == Nodoinicial) { //Console.WriteLine("sI ENTRO PAPU"); Elemento.distancia = 0; Elemento.definitivo = false; Elemento.proveniente = Nodoinicial; } listaDikstra.Add(Elemento); } int opc = 0; while (opc == 0) { /* foreach(DijkstraElementos n in listaDikstra) * { * Console.WriteLine(n.actual + " " + n.definitivo + " " + n.distancia + " " + n.proveniente); * }*/ int indice = selecciona(); if (indice == -1) { int i = 0; foreach (DijkstraElementos n in listaDikstra) { if (n.distancia == 1000000000 && n.definitivo == false) { n.definitivo = true; n.distancia = 0; n.proveniente = n.actual; } //Console.WriteLine(listaDikstra[i].actual + " " + listaDikstra[i].proveniente + " " + listaDikstra[i].distancia + " " + listaDikstra[i].definitivo); i++; } // break; } else { listaDikstra[indice].definitivo = true; if (listaDikstra[indice].proveniente != " " && listaDikstra[indice].actual != listaDikstra[indice].proveniente) { Vuelo v = new Vuelo(listaDikstra[indice].proveniente[0], listaDikstra[indice].actual[0], dAMETIEMPO(listaDikstra[indice].proveniente, listaDikstra[indice].actual), dAMECOSTO(listaDikstra[indice].proveniente, listaDikstra[indice].actual)); finalVuelos.Add(v); if (v.getDestino() == NodoFinal[0]) { Console.WriteLine("entro"); foreach (Vuelo n in finalVuelos) { Console.WriteLine(n.getOrigen() + " " + n.getDestino() + " " + n.tiempo + " " + n.costo); } // Console.WriteLine("elementos dijkstar"); /* foreach (DijkstraElementos n in listaDikstra) * { * Console.WriteLine(n.actual + " " + n.definitivo + " " + n.proveniente+ " " + n.distancia); * }*/ break; } } // Console.WriteLine(listaDikstra[indice].proveniente + " " + listaDikstra[indice].actual + " " + Convert.ToString(listaDikstra[indice].distancia)); actualiza(listaDikstra[indice]); } if (condicionDefifitivos()) { opc = 1; } } bool banderaVacio = false; EscojeVuelos2_O(Nodoinicial[0], NodoFinal[0]); foreach (DijkstraElementos n in listaDikstra) { // Console.WriteLine(n.actual + " " + n.definitivo + " " + n.distancia + " " + n.proveniente); if (n.actual == NodoFinal && n.distancia == 0) { banderaVacio = true; } } if (banderaVacio != true) { AcListview(); buttonSold.Enabled = true; } else { MessageBox.Show("No Existe Ruta Para llegar al Destino " + NodoFinal); } } DibujarOD(); }
//EMPEZAMOS HACER EL DIKSTRA private void button1_Click_1(object sender, EventArgs e) { ReiniciarTodo(); listViewDikstra.Items.Clear(); listViewRutAS.Items.Clear(); string Nodoinicial = listViewCiudades.FocusedItem.SubItems[0].Text; if (noTieneAdyacentes(Nodoinicial)) { panel.Refresh(); MessageBox.Show("Ese Nodo no tiene adyacentes no se pueden calcular rutas"); } else { foreach (Nodo n in g.listaNodo) { DijkstraElementos Elemento = new DijkstraElementos(n.getCiudad().GetNombreCiudadString()); if (Elemento.actual == Nodoinicial) { Elemento.distancia = 0; Elemento.definitivo = false; Elemento.proveniente = Nodoinicial; } listaDikstra.Add(Elemento); } int opc = 0; while (opc == 0) { /* foreach(DijkstraElementos n in listaDikstra) * { * Console.WriteLine(n.actual + " " + n.definitivo + " " + n.distancia + " " + n.proveniente); * }*/ int indice = selecciona(); if (indice == -1) { int i = 0; foreach (DijkstraElementos n in listaDikstra) { if (n.distancia == 1000000000 && n.definitivo == false) { n.definitivo = true; n.distancia = 0; n.proveniente = n.actual; } Console.WriteLine(listaDikstra[i].actual + " " + listaDikstra[i].proveniente + " " + listaDikstra[i].distancia + " " + listaDikstra[i].definitivo); i++; } // break; } else { listaDikstra[indice].definitivo = true; if (listaDikstra[indice].proveniente != " " && listaDikstra[indice].actual != listaDikstra[indice].proveniente) { Vuelo v = new Vuelo(listaDikstra[indice].proveniente[0], listaDikstra[indice].actual[0], listaDikstra[indice].distancia, 1); finalVuelos.Add(v); } // Console.WriteLine(listaDikstra[indice].proveniente + " " + listaDikstra[indice].actual + " " + Convert.ToString(listaDikstra[indice].distancia)); actualiza(listaDikstra[indice]); } if (condicionDefifitivos()) { opc = 1; } } DibujarDijkstra(); mostrarlistview(); Rutas(Nodoinicial); } }