首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数独回溯

数独回溯
EN

Stack Overflow用户
提问于 2015-04-03 08:17:56
回答 1查看 60关注 0票数 1

下面是我的solve方法。当我在我的main方法中调用它时,什么也没有发生,所有成功的东西都不会被执行,但是eclipse也不会报告错误。

代码语言:javascript
复制
    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;
}

这个算法会走回头路吗?若否,原因为何?

EN

回答 1

Stack Overflow用户

发布于 2015-05-08 00:46:37

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

在代码的for循环部分中,应该有如下内容

代码语言:javascript
复制
 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是我解数独的代码。希望能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29424535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档