private void primButton_Click(object sender, EventArgs e) { List <Ciudad> L = new List <Ciudad>(); listaAristas ARM = new listaAristas(); Arista E = new Arista(); Pen pen1 = new Pen(Color.GreenYellow, 10); pen1.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; int n = listaCiudades.Count; while (L.Count != n) { int x = 1, y = 1, x2 = 1, y2 = 1; E = aristaMenor(ref L); ARM.Add(E); foreach (Ciudad myCiudad in listaCiudades) { if (E.origen == myCiudad.nombre) { x = myCiudad.x; y = myCiudad.y; } } foreach (Ciudad myCiudad in listaCiudades) { if (E.destino == myCiudad.nombre) { x2 = myCiudad.x; y2 = myCiudad.y; } } mexicoPictureBox.CreateGraphics().DrawLine(pen1, x, y, x2, y2); //Console.WriteLine("x: " + x + " Y: " + y + " x2: " + x2 + " Y2: " + y2); if (encontrarArista(ref L, ref E)) { Ciudad n1 = new Ciudad(E.destino, 0, 0); L.Add(n1); } else { Ciudad n2 = new Ciudad(E.origen, 0, 0); L.Add(n2); } } //ARM.Add(E); }
private bool encontrarArista(ref List <Ciudad> L, ref Arista e) { bool encontrado = false; foreach (Ciudad myCiudad in L) { if (myCiudad.nombre == e.origen) { encontrado = true; return(encontrado); } } return(false); }
public Arista aristaMenor(ref List <Ciudad> L) { quickSort(0, listaVuelos.Count - 1); Arista e = new Arista(); List <Arista> listaAristas = new List <Arista>(); foreach (Vuelo myVuelo in listaVuelos) { Arista nuevaArista = new Arista(); nuevaArista.origen = myVuelo.origen; nuevaArista.destino = myVuelo.destino; nuevaArista.costo = myVuelo.costo; nuevaArista.ponderacion = myVuelo.tiempo; listaAristas.Add(nuevaArista); } for (int i = 0; i < listaAristas.Count; i++) { e = listaAristas[i]; if (Mi_contain(ref L, e.origen)) { if (!Mi_contain(ref L, e.destino)) { return(e); } } if (!Mi_contain(ref L, e.origen)) { if (Mi_contain(ref L, e.destino)) { return(e); } } } return(e); }
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); listaVuelos listaVuelos = new listaVuelos(); listaPasajeros listaPasajeros = new listaPasajeros(); listaCiudades listaCiudades = new listaCiudades(); // Leer Vuelos StreamReader Leer; Leer = new StreamReader("Vuelos.txt"); while (!Leer.EndOfStream) { string lineas = Leer.ReadLine(); char delimitador = ('|'); string[] palabras = lineas.Split(delimitador); Vuelo vueloN = new Vuelo(palabras[0], palabras[1], int.Parse(palabras[3]), int.Parse(palabras[2]), palabras[4], Int32.Parse(palabras[5]), Int32.Parse(palabras[6])); listaVuelos.Add(vueloN); } Leer.Close(); // Leer Pasajeros StreamReader LeerPasajeros; LeerPasajeros = new StreamReader("Pasajeros.txt"); while (!LeerPasajeros.EndOfStream) { string lineas = LeerPasajeros.ReadLine(); char delimitador = ('|'); string[] palabras = lineas.Split(delimitador); Pasajero pasajeroN = new Pasajero(palabras[0], palabras[1], palabras[2], Int32.Parse(palabras[3]), Int32.Parse(palabras[4])); listaPasajeros.Add(pasajeroN); } LeerPasajeros.Close(); for (int i = 0; i < listaPasajeros.Count(); i++) { for (int j = 0; j < listaVuelos.Count(); j++) { if (listaPasajeros[i].indiceVuelo == listaVuelos[j].contadorAsientos) { listaVuelos[j].indice[listaPasajeros[i].numeroAsiento - 1] = false; } } } //Leer Ciudades StreamReader LeerCiudades; LeerCiudades = new StreamReader("Ciudades.txt"); while (!LeerCiudades.EndOfStream) { string lineas = LeerCiudades.ReadLine(); char delimitador = ('|'); string[] palabras = lineas.Split(delimitador); Ciudad ciudadN = new Ciudad(palabras[0], Int32.Parse(palabras[1]), Int32.Parse(palabras[2])); listaCiudades.Add(ciudadN); } LeerCiudades.Close(); // Insertar aristas foreach (Ciudad myCiudad in listaCiudades) { foreach (Vuelo myVuelo in listaVuelos) { if (myCiudad.nombre == myVuelo.origen) { int cont = 0; Arista nuevaArista = new Arista(); nuevaArista.origen = myVuelo.origen; nuevaArista.destino = myVuelo.destino; nuevaArista.costo = myVuelo.costo; foreach (Ciudad otherCiudad in listaCiudades) { if (otherCiudad.nombre == myVuelo.destino) { nuevaArista.indice = cont; break; } cont++; } myCiudad.myListaAristas.Add(nuevaArista); } } } Application.Run(new Principal(ref listaVuelos, ref listaPasajeros, ref listaCiudades)); //Escribir Vuelos StreamWriter Escribir = new StreamWriter("Vuelos.txt"); foreach (Vuelo objeto in listaVuelos) { Escribir.WriteLine(objeto.origen.ToString() + '|' + objeto.destino.ToString() + '|' + objeto.costo + '|' + objeto.tiempo + '|' + objeto.fecha + '|' + objeto.indiceVuelo + '|' + objeto.contadorAsientos); } Escribir.Close(); //Escribir Pasajeros StreamWriter EscribirPasajero = new StreamWriter("Pasajeros.txt"); foreach (Pasajero objeto in listaPasajeros) { EscribirPasajero.WriteLine(objeto.nombre + "|" + objeto.apellido + "|" + objeto.edad + "|" + objeto.numeroAsiento + "|" + objeto.indiceVuelo); } EscribirPasajero.Close(); //Escribir Ciudades StreamWriter EscribirCiudades = new StreamWriter("Ciudades.txt"); foreach (Ciudad myCiudad in listaCiudades) { EscribirCiudades.WriteLine(myCiudad.nombre + '|' + myCiudad.x + '|' + myCiudad.y); } EscribirCiudades.Close(); }
// TERMINA PRIM // COMIENZA KRUSKAL private void Kruskal_Click(object sender, EventArgs e) { Graphics papel; papel = mexicoPictureBox.CreateGraphics(); Pen pen = new Pen(Color.Green, 10); pen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; List <listaListas> CC = new List <listaListas>(); listaAristas T = new listaAristas(); foreach (Ciudad myCiudad in listaCiudades) { listaListas nuevo = new listaListas(); nuevo.nombre = myCiudad.nombre; nuevo.x = myCiudad.x; nuevo.y = myCiudad.y; CC.Add(nuevo); } int N = listaCiudades.Count; listaAristas A = new listaAristas(); quickSort(0, listaVuelos.Count - 1); foreach (Vuelo myVuelo in listaVuelos) { Arista nuevo = new Arista(); nuevo.origen = myVuelo.origen; nuevo.destino = myVuelo.destino; nuevo.ponderacion = myVuelo.tiempo; A.Add(nuevo); } Arista v = new Arista(); while (T.Count < N - 1) { v = A[0]; A.RemoveAt(0); int c1 = 0, c2 = 0; bool flag = false; foreach (listaListas lista1 in CC) { if (lista1.nombre == v.origen) { break; } else { foreach (Ciudad ciudad2 in lista1.ciudades) { if (ciudad2.nombre == v.origen) { flag = true; break; } } } if (flag == true) { break; } c1++; } flag = false; foreach (listaListas lista2 in CC) { if (lista2.nombre == v.destino) { break; } foreach (Ciudad myCiudad2 in lista2.ciudades) { if (myCiudad2.nombre == v.destino) { flag = true; break; } } if (flag == true) { break; } c2++; } if (c1 != c2) { T.Add(v); MessageBox.Show(v.origen + v.destino); int x = 0, y = 0, x2 = 0, y2 = 0; foreach (Ciudad myCiudad in listaCiudades) { if (myCiudad.nombre == v.origen) { x = myCiudad.x; y = myCiudad.y; } } foreach (Ciudad myCiudad in listaCiudades) { if (myCiudad.nombre == v.destino) { x2 = myCiudad.x; y2 = myCiudad.y; } } papel.DrawLine(pen, x, y, x2, y2); Ciudad nuevo = new Ciudad(CC[c2].nombre, 0, 0); foreach (Ciudad myCiudad in CC[c2].ciudades) { Ciudad nuevo2 = new Ciudad(myCiudad.nombre, 0, 0); nuevo2.nombre = myCiudad.nombre; nuevo2.x = myCiudad.x; nuevo2.y = myCiudad.y; CC[c1].ciudades.Add(nuevo2); } nuevo.nombre = CC[c2].nombre; nuevo.x = CC[c2].x; nuevo.y = CC[c2].y; CC[c1].ciudades.Add(nuevo); CC.RemoveAt(c2); } } foreach (Arista myArista in T) { Console.WriteLine(myArista.origen); Console.WriteLine(myArista.destino); Console.WriteLine("--"); } }