数独回溯

时间:2015-04-03 00:17:56

标签: sudoku backtracking

以下是我的解决方法。当我在main方法中调用它时,没有任何反应,并且所有后续操作都没有执行,但eclipse没有报告错误。

    public boolean solve(int r, int c){
    if(c>8){
        c=0;
        r++;
    }
    if(r>8){
        return true;
    }
    while(table[r][c].value!=0){
        c++;
        if(c>8){
            c=-0;
            r++;
        }
        if(r>8){
            return true;
        }
    }
    for(int k=1;k<10;k++){
        if(table[r][c].checkRow(k)&&table[r][c].checkCol(k)&&table[r][c].checkCube(k)){
            table[r][c].value=k;
            solve(r,c);
        }
    }
    table[r][c].value=0;
    return false;
}

这个算法会回溯吗?如果没有,为什么?

1 个答案:

答案 0 :(得分:1)

它看起来像是一个逻辑错误,因此eclipse不会报告任何内容。

在你的代码的for循环部分,你应该有这样的东西

 for(int k=1;k<10;k++){
        if(table[r][c].checkRow(k)&&table[r][c].checkCol(k)&&table[r][c].checkCube(k)){
            table[r][c].value=k;
            if(solve(r,c)){
                return true;
             }
             table[r][c].value=0;
        }
    }

在你的情况下,你是在for循环之外取消分配表,这可以防止代码回溯。

Here是我解决数独的代码。希望能帮助到你。