algorithm - 如何证明一个数独解法是独一无二的

标签 algorithm sudoku

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

最佳答案

尝试找到两个解决方案。

最简单的算法是蛮力recursive algorithm与回溯。找到第一个解决方案后,回溯并寻找第二个。这很慢,但(与仅依赖逻辑的算法不同)它保证最终能够找到所有的解决方案。因此,如果该算法终止时只找到一个解,那么该解一定是唯一的。

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

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

更高级的优化涉及寻找模式,让您无需猜测即可推断出数字。以下是一些示例:

关于algorithm - 如何证明一个数独解法是独一无二的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5052866/

相关文章:

java - 并行冒泡排序性能

java - 如何知道我们应该添加的最少数字以获得完整数组

c# - 道格拉斯-普克算法 : understanding use with polgyons

algorithm - 测试数独

algorithm - 生成最小/不可简化的数独

c++ - 数独递归回溯,反递归太早

C数独回溯求解器预检函数

c# - 计算客户端和服务器之间的带宽?

algorithm - 在最大堆中找到第二大元素的最快算法(有重复项)

java - Java问题中的蛮力数独求解器算法