Пример #1
0
        public override List <string> floyd(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);
                }
                centinela = MetodosAuxiliares.siguenteFloyd(centinela, ref recorridos, destino);
            }
            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);
        }