Beispiel #1
0
  @Override
  public List<DIRECTION> calculate(IProgressListener listener) throws GameException {
    int j = getHeuristic();
    for (ans = j; ; ans++) {
      iterationCounter = 0;
      boolean resolved = false;
      long beginTime = System.currentTimeMillis();

      if (solve(startState, blankIndex, 0, -1, j)) {
        resolved = true;
      }

      long consumeTime = System.currentTimeMillis() - beginTime;

      if (listener != null) {
        listener.onProgress(new long[] {ans, iterationCounter, consumeTime});
      }

      Log.d(TAG, "running time for ans(" + ans + ") is " + (consumeTime) + "ms");
      Log.d(TAG, "iteration count for ans(" + ans + ") is " + iterationCounter);

      if (resolved) {
        break;
      }
    }

    List<DIRECTION> solution = new ArrayList<DIRECTION>();

    for (int i = 0; i < ans; i++) {
      switch (moves[i]) {
        case UP:
          solution.add(DIRECTION.UP);
          break;
        case DOWN:
          solution.add(DIRECTION.DOWN);
          break;
        case LEFT:
          solution.add(DIRECTION.LEFT);
          break;
        case RIGHT:
          solution.add(DIRECTION.RIGHT);
          break;
      }
    }

    return solution;
  }