我知道如何使用回溯算法为部分填充的数独板获得一个解决方案,但我不知道如果主板有多个解决方案,如何获得所有解决方案。有算法吗?
以下是我尝试生成所有解决方案的代码示例,但它反复生成相同的解决方案,我不确定问题是什么。
boolean solve(Stack<Integer> emptyLocationList) {
if(emptyLocationList.size()==0) return false;
int emptyId = emptyLocationList.peek();
int row = emptyId/9, col = emptyId%9;
for(int val=1; val<=9; val++) {
if(isSafe(board, row, col, val)) {
// set value
board[row][col] = val;
emptyLocationList.pop();
// move forward
if(solve(emptyLocationList)) return true;
// backtrack
board[row][col] = 0;
emptyLocationList.push(emptyId);
}
}
return false;
}
说明:
val
放在(row, col)
board
当我将if(emptyLocationList.size()==0) return false;
更改为if(emptyLocationList.size()==0) return true;
时,它会成功生成一个解决方案。