龙空技术网

数独高级技巧(1):链的基本理论

数独技巧 2017

前言:

当前我们对“搜索算法求解数独问题”大体比较关怀,小伙伴们都想要知道一些“搜索算法求解数独问题”的相关资讯。那么小编同时在网摘上汇集了一些关于“搜索算法求解数独问题””的相关文章,希望咱们能喜欢,各位老铁们快快来了解一下吧!

什么是链?

链是数独高级技巧的基石,它表示两个命题之间的关系,所有数独都可以通过各种简单或复杂的链来解出答案。

在数独中填数的时候,我们每次要判断的命题都是,某个格子能否填入某个数字。

强链和弱链

强链:两个命题不能同时为假,会用 == 表示,画图的时候会用红线

弱链:两个命题不能同时为真,会用 -- 表示,画图的时候会用绿线

不知道在讲什么是吧,我当时也是这么想的,所以直接一点,我直接放图吧

我们先看 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,多训练才能熟练这个技巧

标签: #搜索算法求解数独问题