Algorithm 如何找到部分填充数独板的所有解决方案

Algorithm 如何找到部分填充数独板的所有解决方案,algorithm,sudoku,backtracking,Algorithm,Sudoku,Backtracking,我知道如何使用回溯算法为部分填充的数独板获得一个解决方案,但如果板上有多个解决方案,我不确定如何获得所有解决方案。这有算法吗 这是我试图生成所有解决方案的代码示例,但它重复生成相同的解决方案,我不确定问题出在哪里 boolean solve(Stack<Integer> emptyLocationList) { if(emptyLocationList.size()==0) return false; int emptyId = emptyLocationList.

我知道如何使用回溯算法为部分填充的数独板获得一个解决方案,但如果板上有多个解决方案,我不确定如何获得所有解决方案。这有算法吗

这是我试图生成所有解决方案的代码示例,但它重复生成相同的解决方案,我不确定问题出在哪里

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;
}
布尔解算(堆栈emptyLocationList){
if(emptyLocationList.size()=0)返回false;
int-emptyId=emptyLocationList.peek();
int row=emptyId/9,col=emptyId%9;

对于(int val=1;val)相同的算法,在第一次成功后不要停止。@PM77-1我添加了我编写的代码的主要部分,但没有达到预期的效果。您能看看编辑后的问题并告诉我问题在哪里吗?非常感谢。