我正在尝试编写一个数独求解器,它只会返回第一个可能的解决方案。我设法用 void 方法打印了所有可能的解决方案,但我不能在第一次找到时停下来。
我知道首选的方法是切换到布尔方法并返回true
树 - 但我找不到正确的方法来编写它。
我尝试的任何方式总是给出编译错误(method must return boolean
)。
public boolean recursiveSolve(int line, int column) {
if(line == N) // N is the board size (9)
return true;
// if Cell is not empty - continue
if(board1.getCell(line, column) != 0) {
return nextCell(line, column);
}
// if Cell empty - solve
else {
for(int i = 1; i <= N; i++) {
board1.setCell(line, column, i); // set value to cell
if(board1.boardIsOk()) // check if the board is legal
return nextCell(line, column); // continue
}
board1.setCell(line, column, 0); // backtrack
}
}
private boolean nextCell(int line, int column) {
if(column < 8)
return recursiveSolve(line, column+1); // progress up the row
else
return recursiveSolve(line+1, 0); // progress down the lines
}
任何帮助将不胜感激。