示例#1
0
    public List <TreeNode> GetRuta()
    {
        Init();
        int contador = 0;

        nodoMasCercano = null;
        while (true)
        {
            if (contador == LimiteLoopInfinito)
            {
                return(null);
            }
            if (NodosFinales.Exists(x => x.Data.Comparar(NodoActual.Data)))
            {
                return(NodoActual.ObtenerRutaDesdeOrigen());
            }
            if (PuntosClave.ContainsKey(NodoActual.Data.Comparador))
            {
                PuntosClave.Remove(NodoActual.Data.Comparador);
                if (PuntosClave.Count == 0)
                {
                    return(null);
                }
            }
            AgregarPosibles();
            if (NodosPosibles.Count == 0)
            {
                return(null);
            }
            NodoActual = NodosPosibles[0];
            if (nodoMasCercano == null || NodoActual.EvaluacionGreedy() < nodoMasCercano.EvaluacionGreedy())
            {
                nodoMasCercano = NodoActual;
            }
            DataLog.Add(NodoActual.Data);
            NodosPosibles.RemoveAt(0);
            contador++;
        }
    }