Exemple #1
0
  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;
  }