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++; } }