有没有人知道一个简单的算法来检查数独配置是否有效?我想出的最简单的算法是(对于大小为n的棋盘)用伪代码
for each row
for each number k in 1..n
if k is not in the row (using another for-loop)
return not-a-solution
..do the same for each column但我非常确定一定有更好的(在更优雅的意义上)解决方案。效率并不重要。
发布于 2008-11-14 09:26:52
您需要检查数独的所有约束:
总共有6张支票..使用暴力手段。
如果您知道电路板的大小(即3x3或9x9),则可以使用某种数学优化
编辑:对sum约束的解释:首先检查sum (如果sum不是45,则停止)比检查重复要快得多(也更简单)。它提供了一种丢弃错误解决方案的简单方法。
发布于 2008-11-14 10:33:33
Peter Norvig有一篇关于解决数独难题(使用python)的很好的文章,
https://norvig.com/sudoku.html
也许这对你想做的事情来说太多了,但不管怎样,这都是一本很棒的书
发布于 2009-04-29 12:22:40
检查每一行、每一列和每一个框,使其包含数字1-9,没有重复。这里的大多数答案已经讨论了这一点。
但是如何有效地做到这一点呢?答案:使用循环,如下所示
result=0;
for each entry:
result |= 1<<(value-1)
return (result==511);每个数字将设置结果的一位。如果所有9个数字都是唯一的,则将设置最低的9位。因此,“检查重复项”测试只是检查所有9位都已设置,这与测试result==511相同。你需要做27次这样的检查。每行、每列和每框一个。
https://stackoverflow.com/questions/289537
复制相似问题