Beispiel #1
0
        private string getRutaDijkstra(DijkstraNode d, ref List <DijkstraNode> caminos)
        {
            string ruta       = "";
            string actualname = d.procedencia.name;

            List <string> nodos = new List <string>();

            nodos.Add(actualname);

            while (actualname != listaciudades[comboBox1.SelectedIndex].name)
            {
                foreach (DijkstraNode d1 in caminos)
                {
                    if (d1.IdNodo.name == actualname)
                    {
                        actualname = d1.procedencia.name;
                        nodos.Add(actualname);

                        break;
                    }
                }
            }


            for (int x = nodos.Count - 1; x >= 0; x--)
            {
                ruta = ruta + nodos[x] + "->";
            }
            ruta = ruta + d.IdNodo.name;
            return(ruta);
        }
Beispiel #2
0
        List <DijkstraNode> Dijkstra(CiudadNodo origen, CiudadNodo destino)
        {
            List <DijkstraNode> caminos = new List <DijkstraNode>();

            CiudadNodo nodoActual  = origen;
            string     Definitivos = "";
            int        numDef      = 0;


            //Se crea el vector de caminos

            foreach (CiudadNodo c in listaciudades)
            {
                DijkstraNode nodo = new DijkstraNode(c, 1000000000);

                if (c.getName() == origen.getName())
                {
                    nodo.peso        = 0;
                    nodo.procedencia = origen;
                }

                caminos.Add(nodo);
            }


            //*** Se inicia con el origen;

            Definitivos = origen.getName();
            numDef++;

            //***


            while (numDef != listaciudades.Count)
            {
                dijskUpdate(ref nodoActual, ref caminos, ref Definitivos);
                if (Definitivos.Contains(destino.name))
                {
                    break;
                }
                numDef++;
            }



            return(caminos);
        }
Beispiel #3
0
        //



        //*****   DIJKSTRA


        //        ****          ***        ***        *   *     *****    *****     *****      *****        //
        //        *   *          *          *         *  *      *   *      *       *   *      *   *        //
        //        *    *         *          *         * *       *   *      *       *   *      *   *        //
        //        *     *        *          *         **        *          *       *****      *****        //
        //        *     *        *          *         **        *****      *       *  *       *   *        //
        //        *    *         *      *   *         * *           *      *       *   *      *   *        //
        //        *   *          *       *  *         *  *      *   *      *       *    *     *   *        //
        //        ****          ***       ***         *   *     *****      *       *    *     *   *        //



        CiudadNodo dijskUpdate(ref CiudadNodo nodoactual, ref List <DijkstraNode> caminos, ref string Definitivos)
        {
            DijkstraNode nuevo = new DijkstraNode();



            foreach (DijkstraNode d in caminos)
            {
                if (d.IdNodo.name == nodoactual.name)
                {
                    nuevo.peso = d.peso; break;
                }
            }

            if (checkBoxCosto.Checked)
            {
                foreach (AristaCiudad a in nodoactual.Aristas)
                {
                    foreach (DijkstraNode d in caminos)
                    {
                        if (a.getDest() == d.IdNodo.name)
                        {
                            if ((a.getCosto() + nuevo.peso) < d.peso)
                            {
                                d.peso        = a.getCosto() + nuevo.peso;
                                d.AristaPeso  = a.getCosto();
                                d.procedencia = nodoactual;
                            }
                        }
                    }
                } //fin foreach arista
            }
            else  ////***Tiempo

            {
                foreach (AristaCiudad a in nodoactual.Aristas)
                {
                    foreach (DijkstraNode d in caminos)
                    {
                        if (a.getDest() == d.IdNodo.name)
                        {
                            if ((a.getTiempo() + nuevo.peso) < d.peso)
                            {
                                d.peso        = a.getTiempo() + nuevo.peso;
                                d.AristaPeso  = a.getTiempo();
                                d.procedencia = nodoactual;
                            }
                        }
                    }
                }//fin foreach arista
            }



            caminos.Sort((x, y) => x.peso.CompareTo(y.peso));
            foreach (DijkstraNode d in caminos)
            {
                if (!Definitivos.Contains(d.IdNodo.name))
                {
                    nodoactual = d.IdNodo; break;
                }
            }
            Definitivos = Definitivos + nodoactual.name;



            ///***

            return(nodoactual);
        }
Beispiel #4
0
        private string getRutaDijkstra(DijkstraNode d, ref List<DijkstraNode> caminos)
        {
            string ruta = "";
            string actualname=d.procedencia.name;

            List<string> nodos=new List<string>();

            nodos.Add(actualname);

            while(actualname != listaciudades[comboBox1.SelectedIndex].name)
            {
                foreach(DijkstraNode d1 in caminos)
                {
                    if (d1.IdNodo.name == actualname)
                    {
                        actualname = d1.procedencia.name;
                        nodos.Add(actualname);

                        break;
                    }
                }

            }

               for(int x = nodos.Count-1; x >= 0; x--) { ruta = ruta + nodos[x] + "->"; }
            ruta = ruta + d.IdNodo.name;
            return ruta;
        }
Beispiel #5
0
        //
        //*****   DIJKSTRA
        //        ****          ***        ***        *   *     *****    *****     *****      *****        //
        //        *   *          *          *         *  *      *   *      *       *   *      *   *        //
        //        *    *         *          *         * *       *   *      *       *   *      *   *        //
        //        *     *        *          *         **        *          *       *****      *****        //
        //        *     *        *          *         **        *****      *       *  *       *   *        //
        //        *    *         *      *   *         * *           *      *       *   *      *   *        //
        //        *   *          *       *  *         *  *      *   *      *       *    *     *   *        //
        //        ****          ***       ***         *   *     *****      *       *    *     *   *        //
        CiudadNodo dijskUpdate(ref CiudadNodo nodoactual, ref List<DijkstraNode> caminos, ref string Definitivos)
        {
            DijkstraNode nuevo = new DijkstraNode();

            foreach (DijkstraNode d in caminos) { if (d.IdNodo.name == nodoactual.name) { nuevo.peso = d.peso; break; } }

            if(checkBoxCosto.Checked)
            {

            foreach (AristaCiudad a in nodoactual.Aristas)
            {

                foreach (DijkstraNode d in caminos)
                {
                    if (a.getDest() == d.IdNodo.name)
                    {

                        if ((a.getCosto() + nuevo.peso) < d.peso)
                        {

                            d.peso = a.getCosto() + nuevo.peso;
                                d.AristaPeso = a.getCosto();
                            d.procedencia = nodoactual;

                        }
                    }
                }

            }//fin foreach arista

            }
            else  ////***Tiempo

            {

                foreach (AristaCiudad a in nodoactual.Aristas)
                {

                    foreach (DijkstraNode d in caminos)
                    {
                        if (a.getDest() == d.IdNodo.name)
                        {

                            if ((a.getTiempo() + nuevo.peso) < d.peso)
                            {

                                d.peso = a.getTiempo() + nuevo.peso;
                                d.AristaPeso = a.getTiempo();
                                d.procedencia = nodoactual;

                            }
                        }
                    }

                }//fin foreach arista

            }

            caminos.Sort((x, y) => x.peso.CompareTo(y.peso));
            foreach (DijkstraNode d in caminos) { if (!Definitivos.Contains(d.IdNodo.name)) { nodoactual = d.IdNodo; break; } }
            Definitivos = Definitivos + nodoactual.name;

            ///***

            return nodoactual;
        }
Beispiel #6
0
        List<DijkstraNode> Dijkstra(CiudadNodo origen)
        {
            List<DijkstraNode> caminos = new List<DijkstraNode>();
            CiudadNodo nodoActual=origen;
            string Definitivos = "";
            int numDef=0;

            //Se crea el vector de caminos

            foreach (CiudadNodo c in listaciudades)
            {

                DijkstraNode nodo = new DijkstraNode(c, 1000000000);

                if (c.getName()==origen.getName())
                {
                    nodo.peso = 0;
                    nodo.procedencia = origen;
                }

                    caminos.Add(nodo);
            }

            //*** Se inicia con el origen;

             Definitivos = origen.getName();
             numDef++;

            //***

            while(numDef != listaciudades.Count)
            {

                dijskUpdate(ref nodoActual, ref caminos, ref Definitivos);
                numDef++;

            }

            return caminos;
        }