从我的数独数独求解器获取stackoverflow

时间:2019-03-11 09:39:39

标签: java stack-overflow sudoku

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数据结构。

0 个答案:

没有答案