我的数独解算器不工作

我试图用递归和回溯编码一个数独解算器。 但是,我的代码有一些问题,它总是返回false。 我试图调试,它调用next(int row,int col)方法直到第二行,第六列,然后停止并开始回溯。 问题是回溯继续,直到我的数独游戏中的第一个单元格,然后返回false。 它不会取代与其他人的细胞数量。

这里是我的代码...我错过了什么?

/** Calls solve for the next cell */
private boolean next(int row, int col) {

    if (col < 8)
        return solve(row, col + 1);
    else
        return solve(row + 1, 0);
}

public boolean solve(int row, int col) {

    if (row > 8) {
        return true;
    }
    if (model[row][col] != 0) {
        if (isSafe(row, col, model[row][col]))
            return next(row, col);
    }

    for (int value = 1; value < 10; value++) {
        if (isSafe(row, col, value)) {
            model[row][col] = value;
            return next(row, col);
        }
    }
    return false;

}

尝试添加model[row][col] = 0; 在返回之前假;


return next(row, col);

应该

if (next(row, col)) {
    return true;
}

而如果== 0似乎没有目的。


全做完了

未经测试但具有正确的回溯:将单元格再次设置为0,以便可以再次填充。

public boolean solve(int row, int col) {
    if (row > 8) {
        return true;
    }
    if (model[row][col] != 0) {
        // isSafe may be assumed on correct puzzles.
        return isSafe(row, col, model[row][col]))
            && next(row, col);
    }

    for (int value = 1; value < 10; value++) {
        if (isSafe(row, col, value)) {
            model[row][col] = value;
            if (next(row, col)) {
                return true;
            }
        }
    }
    model[row][col] = 0;
    return false;
}
链接地址: http://www.djcxy.com/p/96167.html

上一篇: My sudoku solver not working

下一篇: What's time complexity of this algorithm for solving Sudoku?