在完成最后一步时,递归不会回到后退

时间:2018-04-29 23:00:25

标签: java recursion depth-first-search

我正在开发一个可以解决算法的程序,我正在使用递归来执行此操作,但是当它检查它是否可以放置一个数字而它不能它只会结束程序,并且不看回来改变之前的数字,任何人都可以帮助我。这是我的代码:

{{1}}

任何提示或建议都很受欢迎

1 个答案:

答案 0 :(得分:0)

很难从您提供的代码中进行诊断,但看起来您似乎误解了回溯的工作方式。在伪代码中,您的算法应该类似于:

test value:
    change state to include value
    if state is legal
        if state is complete
            use completed state
        else
            test all possible values in next step
    change state to remove value

尝试更改代码以匹配该模式。

例如,如果你有很好的封装类来代表Sudoko板,那么要解决的代码可能是:

private void solve(Board board, CellValue value) {
    board.add(value);
    if (board.isLegal()) {
        if (board.isComplete()) {
            useSolution(board);
        } else {
            Cell cell = board.firstEmptyCell();
            for (Value value: Value.values())
                solve(board, new CellValue(cell, value));
        }
    }
    board.remove(value);
}