public boolean solveSudoku() {
int row, col;
for (Map.Entry<Pair<Integer, Integer>, List<Integer>> entry : amap.entrySet()) { // iterate through map (amap)
row = entry.getKey().getKey();
col = entry.getKey().getValue();
for (Integer num : entry.getValue()) {
if (isSafe(row, col, num)) {
dpuzzle[row][col] = num;
if (solveSudoku()) { // recursive call?
return true;
} else {
dpuzzle[row][col] = 0; // replace it
}
}
}
return false;
}
return true;
}
Я реализовал решатель судоку, используя метод byGroup, чтобы исключить невозможного кандидата для каждой пустой ячейки и сохранить его на карте, ключ карты - это (i, j) сетки, иarraylist в значении Map - возможные кандидаты, а executeSudoku () должен рекурсивно вызывать себя для решения головоломки с использованием возможного кандидата из ArrayList.Однако он выплевывает:
Exception in thread "main" java.lang.StackOverflowError
at soduku.BacktrackSolver.solveSudoku(BacktrackSolver.java:113)
at soduku.BacktrackSolver.solveSudoku(BacktrackSolver.java:121)
это строки
for (Map.Entry<Pair<Integer, Integer>, List<Integer>> entry : amap.entrySet()) {
и
if (solveSudoku()) {
Пожалуйста, просветите меня, если я сделал какую-либо ошибку, как этоМоя первая попытка использования структур данных Java.