Это должно создать действительное поле судоку. Я удалил квадратный чек, это не часть моей проблемы, так что не удивляйтесь этому.
Моя проблема в том, что метод прерывается, когда не удается правильно добавить 9. Я почему-то не понимаю, как заставить его вернуться к предыдущей точке и подсчитать, что создаст новый путь, поэтому я думаю, что если я правильно понял, все должно быть в порядке. Я все еще пытаюсь использовать рекурсию: - /
Насколько я могу судить, я думаю, что sudokuCorrect () делает то, что должно. Изменить: вы можете игнорировать логический тест. Я знаю, что не использую, я пытался что-то придумать, но, видимо, не понимаю, как это использовать.
Выход
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 2 | 1 | 4 | 3 | 6 | 5 | 8 | 7 | 9 |
соответственно, когда Squarechecker интегрирован, он будет выглядеть как
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 4 | 5 | 6 | 2 | 3 | 7 | 9 | 0 | 0 |
и после этого строки независимо от того, какой вариант отмечен. Так что проблема та же.
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
public static boolean sudoku(int i, int j) {
boolean test = false;
for (int n = 1; n < 10; n++) {
feld[i][j] = n;
if (sudokuCorrect(i, j)) {
if (j < 8) {
test = sudoku(i, j + 1);
} else if (i < 8) {
test = sudoku(i + 1, 0);
}
System.out.println(i + ", " + j);
if ((i == 8 && j == 8 && feld[i][j] > 0) || feld[i][j] > 0) {
return true;
} else {
return false;
}
}
}
if (test) {
return true;
} else {
return false;
}
}
public static boolean sudokuCorrect(int i, int j) {
for (int a = 0; a <= j; a++) {
map.get(i + 10).add(feld[i][a]);
}
if (map.get(i + 10).size() == j + 1) {
// wenn Zeilen korrekt sind, so prüfe Spalte
for (int a = 0; a <= i; a++) {
map.get(j).add(feld[a][j]);
}
if (map.get(j).size() == i + 1) {
return true;
}
}
map.get(i + 10).clear(); // leert das HashSet
map.get(j).clear();
return false;
}