Sudoko解决程序,检查重复和困惑的方法

问题描述 投票:0回答:2

我正在编写一个程序,从用户处接收 Sudoko 2D 数组,然后检查解决方案是否有效(行/列或正方形中的数字没有重复)。 在官方解决方案中,这是他们用来检查重复项的方法。 但我不明白 numcounter 函数部分,它没有写在代码的任何其他部分。

enter image description here

我尝试理解解决方案,但没有成功。

arrays c multidimensional-array 2d
2个回答
0
投票

在每一行、每一列和每个方块中,每个数字(或者在本例中显然是从 1 到 25 的每个数字)都必须恰好出现一次。

numCounter 数组的作用是,它保存 25 个布尔值,每个布尔值代表其索引号(+1,因为索引从 0 开始)是否已经在此行/列/方格中见过。如果已看到,则当前字段保存的是该行(或列或方格)中第二次出现的数字,因此该解决方案“无效”。如果没有,我们要记住,现在,它做到了。因此我们将当前单元格中的数字对应的 numCounter 索引设置为 true。 这会检查每个数字是否最多出现 1 次。由于每行有 25 个单元格和 25 个可能的数字,因此它还会检查它是否至少出现一次。

我没有看到任何错误检查。如果单元格包含低于 1 或高于 25 的数字,则超出范围,但也许会在程序中的另一点进行检查。

希望我有帮助。


0
投票

-将 25 个单元格定义为 FALSE

-检查每个单元格

--如果单元格为真,则不好

--如果单元格为假,则将其设为真

如果它已经是假的,为什么它会变成真的? 通过这种方式,您可以确保始终一次访问每个单元格。如果在行或列中,如果数字不同,则您访问不同的单元格。这就是逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.