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

数独布尔错误
EN

Stack Overflow用户
提问于 2015-02-27 10:06:02
回答 2查看 81关注 0票数 0

我已经接近完成了一些事情,但它还不是完全完美的……它应该验证数独网格是否有效或无效。我已经用了7个网格,6/7,验证器成功了。这就是它失败的地方。它应该是无效的,因为中间列中有24,但我的程序将其赋值为有效。不知道为什么,提前谢谢!

代码语言:javascript
复制
-------------------------
| 9 5 3 | 2 6 7 | 1 4 8 |
| 6 7 1 | 5 8 4 | 9 3 2 |
| 2 4 8 | 9 1 3 | 7 5 6 |
-------------------------
| 7 1 4 | 6 9 2 | 5 8 3 |
| 5 2 9 | 7 3 8 | 4 6 1 |
| 3 8 6 | 4 5 1 | 2 9 7 |
-------------------------
| 4 6 7 | 3 2 5 | 8 1 9 |
| 1 9 5 | 8 7 6 | 3 2 4 |
| 8 3 2 | 4 1 9 | 6 7 5 |
-------------------------

我的验证器代码:

代码语言:javascript
复制
bool Verifier::verifySolution()
{
    bool found[9];
    for (int row = 0; row < 9; row++)
    {
        // set found elements false
        for (int i = 0; i < 9; i++)
            found[i] = false;

        // Loop 9 col
        for (int col = 0; col < 9; col++)
        {
            // Check if the digit in this col's been found within                
            // corresponding row
            if (found[sudo[row][col] - 1])
                return false;     // 
            else
                found[sudo[row][col] - 1] = true;    // 
        }
    }


    int x = 0;
    int y = 0;
    for (int row = (x / 3) * 3; row < (x / 3) * 3 + 3; row++)
        for (int col = (y / 3) * 3; col < (y / 3) * 3 + 3; col++)
            if (row != x && col != y && found[sudo[row][col]] == sudo[x][y])
                return false;

    return true;
}
EN

回答 2

Stack Overflow用户

发布于 2015-02-27 10:28:01

据我所知,您并没有验证这些列。您验证的是行,验证的是块,而不是列。

此外,对于每个块,您必须将找到的数组中的所有条目重置为false (当您进入该部分时,还必须将每个列的条目重置为false)。

票数 0
EN

Stack Overflow用户

发布于 2015-02-27 10:30:25

  1. ,你没有检查列。第一个大的row循环只检查每一行。由于您尚未遍历x,y combinations.
  2. Also,,因此最后一个块仅显示为检查0,0块。您需要重新清除代码后半部分的
  3. 标志。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28756330

复制
相关文章

相似问题

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