private LinkedList<Nodo> construirCaminoConPredecesores(Nodo current) { // Tengamos en cuenta que en esta lista hay tuplas(x,y,z), x,y son las // posiciones en el plano z, que indica, la cantidad de powerup disponible. // Haciendo la resta entre el valor level de dos nodos v->w, se calcula el // powerup utilizado para dicho salto entre v y w // Definamos powerUpUsado(u,v) = level(v) - level(u) // Asumamos que powerUpUsado(null, v) = 0; // powerUpInicial - level(destino) te da la cantidad de powerUp usado total y // level(destino) la cantidad de powerup disponible al salir del laberinto. LinkedList<Nodo> camino = new LinkedList<Nodo>(); // armo una lista de nodos que indican el camino de origen a destino. // como tengo el predecesor para cada nodo, puedo ir de atras hacia adelante encadenandolo. Nodo nodo = current; while (damePredecesor(nodo) != null) { Nodo predecesor = damePredecesor(nodo); nodo.setLevel(predecesor.getLevel() - nodo.getLevel()); camino.addFirst(nodo); // avanzo en el camino nodo = predecesor; } nodo.setLevel(0); camino.addFirst(nodo); return camino; }