private void barataButton_Click(object sender, EventArgs e) { unoOdos = 1; string nodo_seleccionado = origenTextBox.Text; Graphics papel; papel = mexicoPictureBox.CreateGraphics(); Pen lapiz1 = new Pen(Color.Green, 10); Pen lapiz2 = new Pen(Color.Red, 3); int infinito = 0; foreach (Vuelo objeto in listaVuelos) { infinito += objeto.tiempo; } listaDijkstra VD = new listaDijkstra(); foreach (Ciudad myCiudad in listaCiudades) { Dijkstra nuevo = new Dijkstra(); nuevo.nombre = myCiudad.nombre; nuevo.distancia = infinito + 10; VD.Add(nuevo); } int nDef = 0; Dijkstra nodo_Act = new Dijkstra(); foreach (Ciudad myCiudad in listaCiudades) { if (myCiudad.nombre == nodo_seleccionado) { papel.DrawEllipse(lapiz1, myCiudad.x, myCiudad.y, 10, 10); } } nodo_Act.nombre = nodo_seleccionado; nodo_Act.nodo_ant = nodo_seleccionado; nodo_Act.distancia = 0; nodo_Act.def = true; foreach (Dijkstra myDijkstra in VD) { if (nodo_Act.nombre == myDijkstra.nombre) { myDijkstra.distancia = nodo_Act.distancia; myDijkstra.def = nodo_Act.def; myDijkstra.nodo_ant = nodo_Act.nodo_ant; } } nDef++; while (nDef < listaCiudades.Count) { Actualiza(nodo_Act, ref VD); nodo_Act = Min(ref VD); foreach (Dijkstra myDijkstra in VD) { if (nodo_Act.nombre == myDijkstra.nombre) { myDijkstra.def = true; } } nodo_Act.def = true; nDef++; } foreach (Dijkstra objeto in VD) { Console.WriteLine(objeto.nombre); Console.WriteLine(objeto.distancia); Console.WriteLine(objeto.nodo_ant); Console.WriteLine(objeto.def); } temporal.Clear(); foreach (Dijkstra Elem in VD) { temporal.Clear(); Console.WriteLine(nodo_seleccionado + " -> " + Elem.nombre + ": " + Elem.distancia); temporal.Add(Elem.nombre); string aux = Elem.nombre; int breakeador = 0; while (aux != nodo_seleccionado) { if (breakeador == VD.Count) { break; } foreach (Dijkstra myDijkstra in VD) { if (myDijkstra.nombre == aux) { bool f = false; foreach (string temp in temporal) { if (temp == myDijkstra.nodo_ant) { f = true; } } if (f == false) { temporal.Add(myDijkstra.nodo_ant); aux = myDijkstra.nodo_ant; } } } breakeador++; } Console.WriteLine("Ruta a seguir"); for (int i = temporal.Count - 1; i >= 0; i--) { if (i != 0) { if (temporal[i] != temporal[i - 1]) { Console.WriteLine(temporal[i]); } } } total = Elem.distancia; Console.WriteLine("--"); if (Elem.nombre.ToString() == destinoTextBox.Text) { break; } } total2 = 0; foreach (string u in temporal) { Console.WriteLine(u); } for (int i = temporal.Count - 1; i > 0; i--) { foreach (Vuelo myVuelo in listaVuelos) { if (temporal[i] == myVuelo.origen && temporal[i - 1] == myVuelo.destino) { total2 += myVuelo.costo; } } } // MOSTRAR LISTA DISPONIBLE for (int i = temporal.Count - 1; i > 0; i--) { int x1 = 0, y1 = 0, x0 = 0, y0 = 0; for (int j = 0; j < listaCiudades.Count; j++) { if (temporal[i] == listaCiudades[j].nombre) { x1 = listaCiudades[j].x; y1 = listaCiudades[j].y; } } for (int j = 0; j < listaCiudades.Count; j++) { if (temporal[i - 1] == listaCiudades[j].nombre) { x0 = listaCiudades[j].x; y0 = listaCiudades[j].y; } } papel.DrawLine(lapiz2, x1, y1, x0, y0); } }
private void dijkstraButton_Click(object sender, EventArgs e) { string nodo_seleccionado = origenTextBox.Text; Graphics papel; papel = mexicoPictureBox.CreateGraphics(); Pen lapiz1 = new Pen(Color.Green, 10); Pen lapiz2 = new Pen(Color.Red, 3); int infinito = 0; foreach (Vuelo objeto in listaVuelos) { infinito += objeto.tiempo; } listaDijkstra VD = new listaDijkstra(); foreach (Ciudad objeto in listaCiudades) { Dijkstra nuevo = new Dijkstra(); nuevo.nombre = objeto.nombre; nuevo.distancia = infinito + 10; VD.Add(nuevo); } int nDef = 0; Dijkstra nodo_Act = new Dijkstra(); foreach (Ciudad objeto in listaCiudades) { if (objeto.nombre == nodo_seleccionado) { papel.DrawEllipse(lapiz1, objeto.x, objeto.y, 10, 10); } } nodo_Act.nombre = nodo_seleccionado; nodo_Act.nodo_ant = nodo_seleccionado; nodo_Act.distancia = 0; nodo_Act.def = true; foreach (Dijkstra objeto in VD) { if (nodo_Act.nombre == objeto.nombre) { objeto.distancia = nodo_Act.distancia; objeto.def = nodo_Act.def; objeto.nodo_ant = nodo_Act.nodo_ant; } } nDef++; while (nDef < listaCiudades.Count) { Actualiza(nodo_Act, ref VD); nodo_Act = Min(ref VD); foreach (Dijkstra objeto in VD) { if (nodo_Act.nombre == objeto.nombre) { objeto.def = true; } } nodo_Act.def = true; nDef++; } foreach (Dijkstra objeto in VD) { Console.WriteLine(objeto.nombre); Console.WriteLine(objeto.distancia); Console.WriteLine(objeto.nodo_ant); Console.WriteLine(objeto.def); } for (int i = VD.Count - 1; i >= 0; i--) { int x = 0, y = 0, x2 = 0, y2 = 0; if (VD[i].nodo_ant.ToString() == "-") { break; } foreach (Ciudad objeto in listaCiudades) { if (objeto.nombre == VD[i].nombre) { x = objeto.x; y = objeto.y; } } foreach (Ciudad objeto in listaCiudades) { if (objeto.nombre == Convert.ToString(VD[i].nodo_ant)) { x2 = objeto.x; y2 = objeto.y; } } papel.DrawLine(lapiz2, x, y, x2, y2); } foreach (Dijkstra Elem in VD) { temporal.Clear(); Console.WriteLine(nodo_seleccionado + " -> " + Elem.nombre + ": " + Elem.distancia); temporal.Add(Elem.nombre); string aux = Elem.nombre; int breakeador = 0; while (aux != nodo_seleccionado) { if (breakeador == VD.Count) { break; } foreach (Dijkstra objeto in VD) { if (objeto.nombre == aux) { temporal.Add(objeto.nodo_ant); aux = objeto.nodo_ant; } } breakeador++; } Console.WriteLine("Ruta a seguir"); string cad = ""; for (int i = temporal.Count - 1; i >= 0; i--) { if (i != 0) { if (temporal[i] != temporal[i - 1]) { cad += temporal[i] + "->"; } } } Console.Write(cad); Console.WriteLine("--"); } }