如何展示数独解决方案的独特性

问题描述 投票:0回答:7

给定一个未解的数独,如何证明它有唯一的解决方案?

algorithm sudoku
7个回答
4
投票

尝试找到两种解决方案。

最简单的算法是带有回溯的强力递归算法。找到第一个解决方案后,回溯并寻找第二个解决方案。这很慢,但(与仅依赖逻辑的算法不同)它保证最终能够找到所有解决方案。因此,如果该算法因仅找到一个解决方案而终止,则该解决方案必须是唯一的。

这适用于简单的问题,但对于较困难的问题可能需要数小时或数天的时间。如果您需要更快的速度,可以使用许多优化。

一个简单的优化是跟踪每个方块的候选列表。在每一步中找到候选者最少的方格。如果只有一个候选者,请选择该数字,更新网格和其他方格的候选者,然后继续。如果候选人数为零,您就知道您之前做出的猜测是错误的,因此您应该回溯。

更高级的优化涉及寻找允许您在不进行猜测的情况下推断数字的模式。以下是一些示例:


3
投票

某些配置最终会导致非唯一的解决方案,例如:

* *  *  | * * * | * * *
* *  *  | * * * | * * *
* 12 12 | * * * | * * *
--------+-------+------
* *  *  | * * * | * * *
* *  *  | * * * | * * *
* 12 12 | * * * | * * *
--------+-------+------
* *  *  | * * * | * * *
* *  *  | * * * | * * *
* *  *  | * * * | * * *

其中 * 可以是任何数字,而

12
是这些单元格中唯一的可能性。在这种情况下,肯定至少有两种可能的解决方案:

* * * | * * * | * * *    * * * | * * * | * * *
* * * | * * * | * * *    * * * | * * * | * * *
* 1 2 | * * * | * * *    * 2 1 | * * * | * * *
------+-------+------    ------+-------+------
* * * | * * * | * * *    * * * | * * * | * * *
* * * | * * * | * * *    * * * | * * * | * * *
* 2 1 | * * * | * * *    * 1 2 | * * * | * * *
------+-------+------    ------+-------+------
* * * | * * * | * * *    * * * | * * * | * * *
* * * | * * * | * * *    * * * | * * * | * * *
* * * | * * * | * * *    * * * | * * * | * * *

无需计算棋盘的其余部分,您就可以确定此数独的解决方案不是唯一的。然而,即使在某些情况下有可能证明谜题的解决方案不是唯一的;证明谜题的解决方案是唯一的唯一方法是使用蛮力来计算可能的解决方案集仅包含 1 个解决方案。

除了纯粹的暴力破解之外,还有一些捷径,但是在编写混合求解器时需要格外小心。大多数数独解决技术允许您找到多个解决方案(如果存在),但一些高级数独解决技术依赖于正确的数独具有唯一解决方案的事实,并且可能会导致您无法找到第二个解决方案。


2
投票

Soduko 是一个包含 81 个变量的 CSP,每个盒子一个变量。使用从 A1 到 A9 的变量名称作为顶行(从左到右),使用 I1-I9 作为底行。 空白框的域为 {1,2,3,4,5,6,7,8,9},并且它们已经填充了由单个值组成的域。 还有 27 个不同的约束“全部不同”,每行、每列和盒子 9 个盒子各一个。

您可以使用 AC-3 算法来处理简单的模式,或者使用 PC-2 算法来处理更困难的模式,但这会产生更多的计算成本。


0
投票

我认为唯一的办法就是解决它。如果您能够解决它(无需猜测 - 只需 100% 的“移动”),那么就意味着它只有一个解决方案。如果你无法解决它,那么我看到的唯一方法就是使用暴力算法并检查你能够找到多少实际解决方案。


0
投票

如上所述,可以使用带有回溯的强力递归算法。我想建议一次向上应用两次算法;意味着搜索时候选值递增,然后向下使用算法,意味着从最大可能数到1按降序检查候选值,然后至少可以检测到两个解决方案。如果上升和下降方法的结果保持相同,则可以说该难题有唯一的解决方案。


0
投票

使用回溯技术穷举所有可能的解决方案。如果你得到解决方案。解决方案计数器+1。如果计数器增加超过 1,则可以声明该难题有超过 1 个解决方案并退出程序。否则,您必须等到它完成。如果 counter = 1,则确认有一个解。如果 counter = 0,则无解。


0
投票

启发式方法可用于“强制”,甚至允许唯一的解决方案,以满足唯一的 16 分钟线索迭代。当然,任何此类独特算法的制定都必须预测或要求单一解决方案。 我们被告知,这样的算法将需要进行指数级的、繁重的搜索,更不用说坚持“没有 16 条线索有效的数独”

© www.soinside.com 2019 - 2024. All rights reserved.