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