数独求解器不改变值

时间:2017-09-13 14:07:17

标签: java algorithm sudoku

我正在尝试实现一个可以在任何方形大小的板上运行的数独求解器(4x4,9x9,16x6等)。这是我目前对我的算法有的但是一旦运行没有值最终被改变而且theGrid是与解决之前一样。我真的不知道哪里出了问题,感谢任何帮助。

 private int[][] theGrid;
 private int emptyValue = -1;

 public int[][] solve() {
    recSolve(0, 0);
    return theGrid;
 }


 void recSolve(int i, int j) {
    int size = theGrid.length;
    if (i == size) {
        i = 0;
        if (++j == size)
            return;
            //done
    }
    if (theGrid[i][j] != emptyValue)  // skip filled cells
        recSolve(i+1,j);

    for (int val = 1; val <= size; ++val) {
        if (!isPresent(theGrid, i, j, val)) {
            theGrid[i][j] = val;
            recSolve(i+1,j)
        }
    }
    theGrid[i][j] = emptyValue; // reset on backtrack
}

 boolean isPresent(int[][] grid, int row, int col, int num){
    for(int i = 0; i < theGrid.length; i++){
        if(theGrid[i][col] == num) return false;
        if(theGrid[row][i] == num) return false;
    }
    int side = (int)Math.sqrt(theGrid.length);

    int rowStart = row - row % side;
    int colStart = col - col % side;

    for(int m = 0; m < side; m++){
        for(int k = 0; k < side; k++){
            if(grid[rowStart + k][colStart + m] == num) return false;
        }
    }
    return true;
}

1 个答案:

答案 0 :(得分:0)

我建议运行调试器,你很快就会发现错误。首先,isPresent在值不存在时返回true,这与我期望的相反。