Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 数独错误_C++_Boolean_Sudoku - Fatal编程技术网

C++ 数独错误

C++ 数独错误,c++,boolean,sudoku,C++,Boolean,Sudoku,我已经接近完成某件事,但它还不是完全完美。。。假设要验证数独网格是否有效。我向它扔了7个网格,6/7,验证器成功了。这就是它失败的地方。它应该是无效的,因为中间列中的2个4,但是我的程序将它分配为有效的。不知道为什么,提前谢谢 ------------------------- | 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

我已经接近完成某件事,但它还不是完全完美。。。假设要验证数独网格是否有效。我向它扔了7个网格,6/7,验证器成功了。这就是它失败的地方。它应该是无效的,因为中间列中的2个4,但是我的程序将它分配为有效的。不知道为什么,提前谢谢

-------------------------
| 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 |
-------------------------
我的验证码:

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;
}
bool验证器::verifySolution()
{
布尔发现[9];
对于(int行=0;行<9;行++)
{
//将找到的元素设置为false
对于(int i=0;i<9;i++)
发现[i]=错误;
//环路9列
for(int col=0;col<9;col++)
{
//检查此列中的数字是否在
//对应行
if(找到[sudo[row][col]-1])
返回false;//
其他的
找到[sudo[row][col]-1]=true;//
}
}
int x=0;
int y=0;
对于(整数行=(x/3)*3;行<(x/3)*3+3;行++)
对于(整数列=(y/3)*3;列<(y/3)*3+3;列++)
if(row!=x&&col!=y&&found[sudo[row][col]]==sudo[x][y])
返回false;
返回true;
}

我认为您没有验证列。验证的是行和块,而不是列

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

  • 您没有检查列。第一个大行循环,只检查每一行
  • 最后一个块只显示为检查0,0块,因为您没有循环通过x,y组合
  • 此外,还需要为代码的后半部分重新清理找到的标志

  • 当您使用调试器时,哪个语句导致了问题?非常感谢,这就是为什么。。。真不敢相信我忘了检查专栏,反而感到困惑,哈哈。非常感谢你,这就是为什么。。。真不敢相信我忘了检查专栏,反而感到困惑,哈哈。