如何在1秒内找到数独游戏的所有解决方案(计数)?

时间:2012-07-08 11:29:47

标签: algorithm

我尝试过跳舞链接和其他一些搜索算法,但它不会在1秒的给定时间限制内工作。对于拥有大约100万个解决方案的数独游戏,计算所有解决方案大约需要10秒钟。

2 个答案:

答案 0 :(得分:2)

1M结果听起来有点可怕,但为了快速解决,基本上你必须使用消除/约束传播过程和穷尽搜索可能值最小的字段。

Peter Norvig写的一篇优秀文章:Solving Every Sudoku Puzzle

答案 1 :(得分:0)

Sudoku(所有解决方案)的标准求解算法使用backtracking。 Sudoku的经典变体只有一个解决方案(或至少应该有),所以你可能会使用类似人类的技术,但这是不可能的。所以回溯可能是唯一的方法。

但你可能想要使用几个技巧

  • 树的开头(扩展回溯算法的基本prunnign策略,具有更复杂的条件)
  • 大规模并行性(我认为你可能会受益于解决方案的超线性加速,因为一些子问题可能是相同的,因此只能解决一次,或者可能修剪其他线程的某些分支)
  • 使用对称性和设置的一些特殊属性,如果你有一些隐含的知识,这可能是最好的策略
  • 您可以尝试一些黑盒方法 - 例如constraintlogic)编程,这些方法在大量搜索空间中进行了高度优化...