Я пытаюсь написать решатель судоку, который вернет только первое возможное решение.
мне удалось напечатать все возможные решения пустыми методами, но я не могу остановиться на первой находке.
я знаю, что предпочтительным способом является переключение на логические методы и возврат 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
}
Любая помощь будет наиболее ценной.