一尘不染

检查数独字段的一种很酷的算法?

algorithm

有谁知道一种简单的算法来检查Sudoku配置是否有效?我想出的最简单的算法是(对于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

但是我很确定必须有一个更好的(从更优雅的意义上来说)解决方案。效率并不重要。


阅读 266

收藏
2020-07-28

共1个答案

一尘不染

您需要检查Sudoku的所有约束:

  • 检查每一行的总和
  • 检查每列的总和
  • 检查每个盒子上的总和
  • 检查每行重复的数字
  • 检查每列上是否有重复的数字
  • 检查每个盒子上是否有重复的数字

总共6个检查。.使用蛮力方法。

如果您知道电路板的尺寸(例如3x3或9x9),则可以使用某种数学优化方法

编辑 :求和约束的解释:首先检查和(如果和不是45,则停止)比检查重复项要快得多(并且更简单)。它提供了一种丢弃错误解决方案的简便方法。

2020-07-28