其他分享
首页 > 其他分享> > 数独求解C

数独求解C

作者:互联网

我最近一直在用c进行数独游戏.我已经使用SFML制作了它的图形版本,并且效果很好.但是,我需要实现一种可以解决数独功能的算法,同时又不能成为强力算法(因此,回溯对我不起作用; /).我已经读过许多解决它的方法,并且遇到了不同的算法名称(例如Dancing Links),以及仅描述搜索工作原理的算法,而没有提供有关如何实现搜索的任何特定信息. C . (即,为每个“存储桶”分配表格或可能的编号列表,并寻找解决方案,有人还提到了所谓的A *算法吗?)

所以这是我的问题,哪种算法比较容易实现,不是回溯算法吗?在哪里可以找到有关如何在c中使用它的特定信息?提前致谢.
我的程序在二维数组上工作,但是如果需要,我可以以某种方式使存储桶成为结构.

解决方法:

Peter Norvig建议使用消除(约束传播)过程,然后再进行搜索.他的文章here提供了非常详尽的解释.

在约束传播中,您使用以下策略:

(1) If a square has only one possible value, then eliminate that value from the square's peers. 
(2) If a unit has only one possible place for a value, then put the value there.

现在,很容易在O(N)时间中找到拼图中最初填充的正方形.将它们全部放入队列.如果他们的邻居在传播约束后只有一个值,请将其添加到队列中.重复直到队列为空.

难题现在已经解决,或者通过传播约束无法取得进一步的进展.

如果未解决难题,则可以使用更高级的算法,也可以按照Norvig的建议使用回溯.由于回溯是在拼图空间的一小部分上执行的,因此您不会使用蛮力.

标签:sudoku,c,algorithm
来源: https://codeday.me/bug/20191010/1883368.html