i'm trying to write a Sudoku solver which will return only the first possible solution. i managed to print all possible solutions with void methods but i can't stop on the first find.
i know the preferred way is to switch to boolean methods and return true
up the tree -
but i can't find the right way to write it.
any way i tried always give compilation errors (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
}
Any help will be most appreciated.