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