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