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("--");
            }
        }