Hallo, ich habe versucht einen Sudoku Solver zu programmieren. Dahinter steckt natürlich das Prinzip Backtracking. Aber irgendwie kommt es nicht aus der Endlosrekursion raus und ich sehe nicht genau warum. Hier sind die Hilfsmethoden:
Und das meine Backtracking Methode:
Ich hoffe jemand kann mir helfen. Danke
Java:
public boolean isValid(int number, int row, int col, int[][] sudoku) {
for (int i = 0; i < sudoku[row].length; i++) {
if (sudoku[row][i] == number) return false;
if (sudoku[i][col] == number) return false;
}
int r = row - row % 3;
int c = col - col % 3;
for (int x = r; x < r+3; x++) {
for (int y = c; y < c+3; y++) {
if (sudoku[x][y] == number) {
return false;
}
}
}
return true;
}
public boolean isFinal(int[][] sudoku) {
for(int i = 0; i < sudoku.length; i++) {
for (int j = 0; j < sudoku[i].length; j++) {
if (sudoku[i][j] == 0) return false;
}
}
return true;
}
Java:
public int[][] solve(int[][] sudoku) {
int[] candidates = {1,2,3,4,5,6,7,8,9};
if (isFinal(sudoku)) {
return sudoku;
} else {
for(int i = 0; i < sudoku.length; i++) {
for (int j = 0; j < sudoku[i].length; j++) {
if (sudoku[i][j] == 0) {
for (int x = 0; x < candidates.length; x++) {
int c = candidates[x];
if (isValid(c,i,j,sudoku)) {
sudoku[i][j] = i;
}
if (solve(sudoku) != null) {
return sudoku;
}
sudoku[i][j] = 0;
}
}
}
}
return null;
}
}