前言:
当前我们对“搜索算法求解数独问题”大体比较关怀,小伙伴们都想要知道一些“搜索算法求解数独问题”的相关资讯。那么小编同时在网摘上汇集了一些关于“搜索算法求解数独问题””的相关文章,希望咱们能喜欢,各位老铁们快快来了解一下吧!什么是链?
链是数独高级技巧的基石,它表示两个命题之间的关系,所有数独都可以通过各种简单或复杂的链来解出答案。
在数独中填数的时候,我们每次要判断的命题都是,某个格子能否填入某个数字。
强链和弱链
强链:两个命题不能同时为假,会用 == 表示,画图的时候会用红线
弱链:两个命题不能同时为真,会用 -- 表示,画图的时候会用绿线
不知道在讲什么是吧,我当时也是这么想的,所以直接一点,我直接放图吧
我们先看 B1,里面有一个 13 数对
所以 B1 里面两个 1 一定有一个成立,两个 3 也一定有一个成立对吧
那么他们都是强链,记作
R1C1{1} == R3C3{1},R1C1{3}==R3C3{3}
同时他们也是弱链,因为只会有一个 1 和一个 3 成立,记作
R1C1{1} -- R3C3{1},R1C1{3}--R3C3{3}
B1 还有其他链吗,当然还有,R1C1 里面的 13 只能有一个数字,那么 R1C1 的 1 和 3 即是强链也是弱链,同理 R3C3 也是一样
R1C1{1}==R1C1{3},R3C3{1}==R3C3{3}
R1C1{1}--R1C1{3},R3C3{1}==R3C3{3}
再来看 B5,你们能找出来么?
R4C5{4}==R5C5{4},R4C5{1}==R6C5{1},R5C5{3}==R5C5{4},R6C5{1}==R6C5{3}
R4C5{4}--R5C5{4},R4C5{1}--R6C5{1},R5C5{3}--R5C5{4},R6C5{1}--R6C5{3}
R4C5{3}--R5C5{3}--R6C5{3}
好了,你们应该对基本的强弱链有一定了解,接下来说最重要的。
链到底有什么用?
说了这么久,一直都是两个格子的关系,什么事情都做不了啊。
我们试着把链连接起来看看
先看第一种 A==B--C==D
A 和 B 是强链,B 和 C 是弱链,C 和 D 是强链,这样连接后,A 和 D 会是什么关系呢?
结论是 A==D,A 和 D 也是强链,放个简单的表,你们看一下
这个表中,1 为真,0 为假
再解释一下,A==D 说的是 A 和 D 不能同时为假,那么 A 是 1 的时候,这个结论是成立的,重点看 A 是 0 的情况,A 和 B 是强链,A 为 0,那么 B 就是 1,B 和 C 是弱链,B 为 1,那么 C 就是 0,C 和 D 是强链,C 为 0,D 就是 1,所以 A 和 D 是强链。
再来看 A--B==C--D,结论是 A--D,A 和 D 为弱链,还是放个表你们看
这个我就不接着解释了。
然后上面举得例子仅仅是 3 个链,这个结论可以继续扩展下去。
A==B--C==D--E==F--G==H,可以得到 A==H
A--B==C--D==E--F==G--H,可以得到 A--H
你们感兴趣的可以自己画一个上面的表看一下。
链的工作方式就是,找到数独盘势中的强链,用弱链将之连接,在此过程中保证强弱交替,以强链始以强链终,则链的两端点互为强关系。
链两端点是强关系有啥用?
如果这两个端点有共同作用格,可以删除共同作用格中链的数字。
强链始强链终可以这样用,那 A--B==C--D 岂不是没用了
并不是这样的,我们来看一种特殊的链
A--B==C--D==E--A
这个链最终形成了一个环,得到最后的结论是 A--A
A 不能和 A 同真,那么结论就是 A 就是假
同理,如果形成了
A==B--C==D--E==A
得到 A 和 A 不能同假,那么 A 就是真
链还有一种工作方式是,把链形成一个环,环中还是强弱交替,如果最后出现一个点是强链出强链入,那么他就是真,如果弱链出弱链入,那么他就是假
好了,理论讲完了,给几个例子吧
先放一个相对比较容易找到链的图,大家尝试用刚才说的方法来试试。
没找到也没关系,刚学的时候确实比较难找。我把我做的方法放上来,再理解一下开始说的理论。
R6C2{7}==R6C6{7}--R8C6{7}==R8C3{7} 得到 R6C2{7}==R8C3{7}
他们两个的共同作用的格子里面的 7 就可以删掉,也就是上图里面我画绿色圆圈的 7
删掉这两个 7 后,C2 只有一个 7 了,这个数独基本也就解决了。
再放个两个环的例子,我不多解释,大家仔细理解一下。
R7C7{4} 弱链出弱链入,所以它一定不能为 4
这个题是我自己在练习用链的时候截的图,当时我的 App 还不支持 iPad
看 R7C5{1} 也是弱链出弱链入,所以他一定不能是 1,R7C5 就是 6,前面两个例子基本都是用一个数字,最后这个题目用了多个数字,也叫做异数链
好了,这篇文章就说这么多了,主要是讲链的理论知识,后面几个例子只是让你理解一下前面的理论,具体怎么去找链,有些什么样的方法,后面我会继续更新的。
我自己做的 App 里面专家难度的题目,不用链基本都推导不出来,我这篇文章的第一个例子就是专家难度的第一题。
如果你是 iOS 系统,可以搜索 数独游戏 下载我开发的 App,多训练才能熟练这个技巧
标签: #搜索算法求解数独问题