我写了一个数独求解器,当数独可解时它工作得很好。但是,当数独无法解决时,它会在回溯时更改谜题的原始数字。
bool Sudoku::solve(int row, int col){
if (board[row][col] != 0){
int next_col = col;
int next_row = row;
next_col++;
if (next_col > 8){
next_row++;
next_col = 0;
}
if (next_row > 8){
return true;
} else {
if (solve(next_row, next_col))
return true;
}
}
for (int number = 1; number <= 9; number++){
board[row][col] = number;
if (check_row(row, number)
&& check_col(col, number)
&& check_box(row, col, number)){
int next_row = row;
int next_col = col+1;
if (next_col > 8){
next_col = 0;
next_row++;
}
if (next_row > 8){
return true;
}
if (solve(next_row, next_col))
return true;
}
}
board[row][col] = 0;
return false;
}
board 是一个 2D int 数组。我知道我可以使用某种结构而不是整数,它会存储数字是否最初存在,但是这个解决方案对我来说并不是很有吸引力。还有其他方法吗?