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方法实现了Sudoku求解器,以消除每个空单元格的不可能候选者并将其存储到地图中,该地图的键是网格的(i,j),并且其中的arraylist Map的值是可能的候选者,并且resolveSudoku()应该使用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数据结构。