我的数独解算器不工作
我试图用递归和回溯编码一个数独解算器。 但是,我的代码有一些问题,它总是返回false。 我试图调试,它调用next(int row,int col)方法直到第二行,第六列,然后停止并开始回溯。 问题是回溯继续,直到我的数独游戏中的第一个单元格,然后返回false。 它不会取代与其他人的细胞数量。
这里是我的代码...我错过了什么?
/** Calls solve for the next cell */
private boolean next(int row, int col) {
if (col < 8)
return solve(row, col + 1);
else
return solve(row + 1, 0);
}
public boolean solve(int row, int col) {
if (row > 8) {
return true;
}
if (model[row][col] != 0) {
if (isSafe(row, col, model[row][col]))
return next(row, col);
}
for (int value = 1; value < 10; value++) {
if (isSafe(row, col, value)) {
model[row][col] = value;
return next(row, col);
}
}
return false;
}
尝试添加model[row][col] = 0;
在返回之前假;
return next(row, col);
应该
if (next(row, col)) {
return true;
}
而如果== 0似乎没有目的。
全做完了
未经测试但具有正确的回溯:将单元格再次设置为0,以便可以再次填充。
public boolean solve(int row, int col) {
if (row > 8) {
return true;
}
if (model[row][col] != 0) {
// isSafe may be assumed on correct puzzles.
return isSafe(row, col, model[row][col]))
&& next(row, col);
}
for (int value = 1; value < 10; value++) {
if (isSafe(row, col, value)) {
model[row][col] = value;
if (next(row, col)) {
return true;
}
}
}
model[row][col] = 0;
return false;
}
链接地址: http://www.djcxy.com/p/96167.html
上一篇: My sudoku solver not working
下一篇: What's time complexity of this algorithm for solving Sudoku?