8 загадок итеративная реализация глубокого поиска

Я реализовал поиск в глубину (рекурсивный) для 8 задач головоломки в Java:

protected PuzzleState depthFirstSearch(PuzzleState state) {
        PuzzleState start = this.getStartState(); 
        PuzzleState goal = this.getGoalState(); 
        PuzzleState stop = null;

        int limit = 35;
        int depth = state.getDepth();
        boolean tooDeep = false;

        if (state.equals(goal)) {
            return state;
        } else {
            if (depth == limit) {
                return stop;
            } else {
                Collection<Integer> actions = PuzzleAction.getPuzzleActions();
                for (Integer action : actions) {
                    PuzzleState starter = start;
                    PuzzleState next = state.succ(action);

                    if (next != null) {
                        starter = depthFirstSearch(next);
                    }
                    if (starter == stop) {
                        tooDeep = true;
                    } else {
                        if (!starter.equals(start)) {
                            return starter;
                        }
                    }
                }
            }
        }
        if (tooDeep)
            return stop;
        else
            return start;
    }

Я не знаю, что мне нужно изменить, чтобы преобразовать его в итеративный углубленный поиск. Я знаю, что нет предела для глубины, потому что она увеличивается в каждом раунде. Пробовал это:

protected PuzzleState iterativeDeepSearch(PuzzleState state) {
        int depth = state.getDepth();
        for(int limit = 1; limit < depth; limit ++){
            depthFirstSearch(state, limit);
        }
}

Кто-нибудь знает, как изменить его на нужный IDS? Заранее спасибо!

0 ответов

Другие вопросы по тегам