I'm struggling with a backtracking algorithm to determine wether a Sudoku has a unique solution or if it has multiple Solutions. Here's the backtracking code i use:
static boolean solve(int i, int j, int[][] cells) {
if (i == 9) {
i = 0;
if (++j == 9)
return true;
}
if (cells[i][j] != 0) // skip filled cells
return solve(i+1,j,cells);
for (int val = 1; val <= 9; ++val) {
if (legal(i,j,val,cells)) {
cells[i][j] = val;
if (solve(i+1,j,cells))
return true;
}
}
cells[i][j] = 0; // reset on backtrack
return false;
}
First approach: If i change
for (int val = 1; val <= 9; ++val) {
for (int val = 9; val >= 1; val--) {
i get two different solving-algorithmns which should find different solutions (if different solutions exist). The problem with this approach is, that the algorithm doesn't terminate even though its just a slight change and i don't know why.
Second approach: Reset to backtrack and continue searching for a solution. If i try this, it doesn't work either.
I tried to find a Java example, but i can only find information like "reset on backtrack and continue searching for a second solution".
Could someone please provide a example how to change the algorithm so it tells me if multiple solutions exists (the exact number is not needed)
OR
Could someone please explain to me why my first approach doesn't terminate?
Thanks!