数独检查程序C.

时间:2016-01-25 03:32:01

标签: c arrays multidimensional-array sudoku

我试图在c中完成数独解决方案检查程序。在开始编写程序之前,我仍然试图了解构建此程序的步骤。我在网上发现了这个例子http://practicecprogram.blogspot.com/2014/10/c-program-to-find-out-if-solved-sudoku.html

还有一些问题我还是不明白。

1对于我的程序,我会收到一个文本文件,第一个数字是一个数字,表示它包含多少个数独的解决方案。我几乎理解如何检查一个解决方案,但必须为N个解决方案做这个,并使程序适用于多个数独解决方案让我感到困惑。特别是在制作我的2d数组的值。对于多少N组,我的输出在新线上应该只是“是”或“否”。

2检查所有行和列的总和是否为45且值是否> 0,<10足以证明解决方案有效?我假设因为每个谜题只有一个解决方案我不必检查每个3x3网格,如果每行和每列总和为45,它就不会包含重复项。

3 个答案:

答案 0 :(得分:0)

  1. 您的问题陈述缺少输入。该示例假设输入了每个游戏的解决方案,但在#1中,您声明唯一的输入是要解决的游戏数量。每个游戏解决方案都必须有数据来源。让我们假设每个游戏都有另一个文件。您的程序需要阅读每个游戏解决方案,验证解决方案,并简单地报告通过或失败的结果。示例代码需要重新编码以接受基于文件的输入,但不需要一次性将所有解决方案保留在内存中。
  2. Sudoku的另一个规则是行或列中的每个数字只能出现一次。只计算每行或每列的总数不会重复。

答案 1 :(得分:0)

1)简单:

/// Read the number of puzzles;
...
for (i = 0; i < number_of_puzzless; i++) {
   // Read Data for a puzzle
   ...
   // Process puzzle data
   ...
   // Print result
   ... 
}

2)行/列中的总和或所有单元格等于45,所有数字都在1到9的范围内。这是否足以仅检查行和列以表明整个拼图有效?

是的。即使你试图愚弄你的检查员并且会给它排一行,比如说有两个六和两个九,没有七和八,这会破坏对某些列的检查。

答案 2 :(得分:0)

1)一次处理一个拼图。将拼图读入阵列。核实。然后将下一个谜题读入同一个数组。如果您只想为所有谜题共同使用一个是/否,则可以打印否,并在任何检查失败后立即退出。如果你在没有任何失败检查的情况下完成它,那么打印是。如果你需要打印个别谜题是否通过,那么在继续下一个谜题之前回答。

2)不!绝对不。一个简单的例子是充满了所有5的数独。这将为每个块,行和列提供45的总和,但显然是不正确的。仅检查行和列中每个数字的存在也是不够的。例如,考虑在第一行填充1 - 9。每个连续的行是前一行的左旋转。这将给出每行和每列中的所有数字,但这些块将是错误的,例如块0,0将是123,234,456。

检查每个数字的一​​种(可能是最好的)方法是设置一个标志数组。每个索引代表拼图中的数字。扫描线(或行或块)并在到达时为每个数字设置标记。然后检查以确保设置了所有标志。用于检查行:

{{1}}