예제 #1
0
        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);
        }
예제 #2
0
        // 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("--");
            }
        }