Exemplo n.º 1
0
        public override List <string> dijkstra(string origen, string destino)
        {
            List <string> recorrido;
            Nodo          centinela;
            Stack <Nodo>  recorridos;

            recorridos = new Stack <Nodo>();
            recorrido  = new List <string>();
            this.iniciaBanderaAristas();
            centinela = base.BuscaNodo(origen);
            while (!centinela.Nombre.Equals(destino))
            {
                if ((centinela.Nombre.Equals(origen) && !centinela.FataReccorer))
                {
                    break;
                }
                if (!this.nodoEnPila(centinela, recorridos))
                {
                    recorridos.Push(centinela);
                }

                /*if (!centinela.fataReccorer && !centinela.Nombre.Equals(destino) && !centinela.Nombre.Equals(origen))
                 * {
                 *  recorridos.Pop();
                 *  centinela = recorridos.Peek();
                 * }*/
                centinela = MetodosAuxiliares.siguenteDijkstra(centinela, ref recorridos);
            }
            if (!centinela.Nombre.Equals(origen))
            {
                foreach (Nodo nodo in recorridos)
                {
                    recorrido.Add(nodo.Nombre);
                }
                recorrido.Reverse();
                recorrido.Add(centinela.Nombre);
            }
            else
            {
                if (!origen.Equals(destino))
                {
                    recorrido.Clear();
                    recorrido.Add("No existe Camino");
                }
                else
                {
                    recorrido.Add(origen);
                }
            }
            return(recorrido);
        }