最初の可能なソリューションのみを返す数独ソルバーを作成しようとしています。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
}
どんな助けでも大歓迎です。