数独高阶技巧入门之一:链及其简单应用

Posted asdyzh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数独高阶技巧入门之一:链及其简单应用相关的知识,希望对你有一定的参考价值。

链(Chain)是数独高阶技巧的核心,所有数独盘势都可以通过各种或简单或复杂的链来解出答案。链的本质是命题之间的关系,在解数独时,每个填数的步骤都可表现为在『A格中填入1』、『B格中填入2』这样非真即假的直言命题形式,如果条件不充足,命题真假不能判定,我们把数独中这种命题之间的真假关系称之为链。用链解题的逻辑在于,籍由命题真假值的推导,根据链两端点命题的真假来判断其共同作用格内候选数的真假。

强关系(Strong Links)和弱关系(Weak Links)

链可分为强链与弱链,分别由强关系和弱关系构成,定义如下:

强关系——对应矛盾关系和下反对关系,两个命题不可同假,必有一真(下反对关系可以同真);

弱关系——对应矛盾关系和上反对关系,两个命题不可同真,必有一假(上反对关系可以同假)。

 

 
技术分享图片
图1-矛盾关系

?图1小九宫格中,数字A只可能出现在R1C1和R3C3两个格中。根据数独规则,数字1-9在每个Unit(行Row、列Column、宫Box)中均需出现且仅出现1次,易知两个A之间为矛盾关系,两者不可同假,必为一真一假,可作出判断:(1)若 R1C1≠A,则R3C3=A,两个A之间为强关系,构成强链,记作R1C1{A}==R3C3{A};(2)若R1C1=1,则R3C3≠1,两个A之间为弱关系,构成弱链,记作R1C1{1}—R3C3{1}。

 
技术分享图片
图2-上反对关系

?再看一个例子,图2中,数字A仅能出现在三个格中,根据数独规则,可知必有一个A为真,其余两个为假,则三个A两两之间不能同真,为上反对关系,可作出以下判断:(1)若R1C1=A,则R2C2、R3C3≠A;(2)若R2C2=A,则R1C1、R3C3≠A;(3)若R3C3=A,则R1C1、R2C2≠A。

在本例中,存在三条弱链,分别是R1C1{A}—R2C2{A}, R1C1{A}—R3C3{A}, R2C2{A}—R3C3{A}。

在以上两例中,可以看到,当某单元内特定候选数仅存在于两个格中时,两格中的该候选数是矛盾关系,二者之间既构成强链也构成弱链。而当该候选数存在于三个及以上格中时,两两之间是上反对关系,构成弱链。

 
技术分享图片
图3-矛盾关系、上反对关系

强弱关系并不只局限于同一候选数,在图3九宫格中,R1C1中仅存在候选数A、B,R3C3中仅存在候选数A、B、C。如前两例,我们可知,R1C1格中的A和B为矛盾关系,二者之间即是强链也是弱链,R3C3中的A、B、C两两之间为上反对关系,构成弱链。

 
技术分享图片
图4-下反对关系、ALS

图4是复杂一点的情况,R1C1、R23C2三格中共有{1234}四个候选数(这种n格中有n+1个候选数的结构称为ALS——Almost Locked Set),根据数独规则,可知这四个候选数中有且只有一个为假,由强弱链定义易知1、2、3和4之间,两两互为强链。与前述矛盾关系的例子不同,本例{1234}中必有三个为真,则其两两之间为下反对关系,可以同真,不能构成弱链。

链是如何工作的

以上我们对强弱链有了基本的了解,接下来我们把链连接起来看看会发生什么。首先是强弱强链,A==BC==D,我们根据强弱链的定义,画出真值表(只保留有效推导)

 
技术分享图片
图5-强弱强链真值表

由图5可以看到,不论A取真值还是假值,在链的起点A和终点D中至少有一真,即A与D之间为强关系。我们仅考虑A为假的情况(若其为真,则已经可以用来删数),当A为假时,由于A、B、C、D由强弱链交替连接,推导如下:(1)若A为假,根据强链定义B只能为真;(2)若B为真,根据弱链定义C只能为假;(3)若C为假,根据强链定义D只能为真。

可见这种情况下只存在有一种有效推导形式,即A假D真,显然,只要保证以强链始以强链终,  即使将这条链不断延长下去仍可得出同样结论:若起点为假则终点必然为真。综上可知,强弱强链的两端点互为强关系,必有一个为真。

我们再来看弱强弱链的推导。A—B==C—D,真值表如下:

 
技术分享图片
图6-弱强弱链真值表

可见A与D中至少有一假,二者互为弱关系。将其不断延长,结果仍会是这样,推导过程不再赘述。这种情况不能直接用来删减A、D共同作用格的候选数。

 
技术分享图片
图7-强强强链真值表

如果将三条强链连接又会如何呢?A==B==C==D,从图7真值表中可以看到,链的两端点A和D一真一假、全真全假都有可能,也没有删减效果。

由以上推导我们可以总结,在数独解题过程中,链的工作模式是,找到数独盘势中的强链,用弱链将之连接,在此过程中保证强弱交替,以强链始以强链终,则链的两端点互为强关系,必有一真,若其存在共同作用格,则可对共同作用格内的相应候选数进行删减。

链的简单应用

来看一个例子,在图8的盘势中,可以找到一条从R1C4到R4C6的5的链(实线代表强链,虚线代表弱链,R1C4{5}==R1C9{5} — R4C9{5}==R4C6{5}),这条链强弱交替,且以强链始以强链终,可知R1C4的5与R4C6的5互为强关系,必有一个成立,不管哪个成立都可以删去R1C4、R4C6共同作用格(绿色区域)里的5。推导过程如右:(1)若 R1C4=5,则R2C6、R5C4≠5;(2)若R1C4≠5 → R1C9=5 → R4C9≠ 5 → R4C6=5,则 R2C6、R5C4≠5。

 
技术分享图片
图8-Skyscraper

ps:上图中的结构称为摩天楼(Skyscraper),是双强链(强弱强链)的一种基础应用。

再看一个稍微复杂点的例子,在图9盘势中,可以找到一条从R4C6到R6C1的6的链(实线箭头代表强链,虚线代表弱链),可知R4C6与R6C1中的6互为强关系,必有一个成立,故可删去R4C6与R6C1共同作用格(绿色区域)内的6。大家可自行推导以加强对链的掌握。


 
技术分享图片
图9-异数链


作者:零时四分_719b
链接:https://www.jianshu.com/p/4c794e9969c3
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。






以上是关于数独高阶技巧入门之一:链及其简单应用的主要内容,如果未能解决你的问题,请参考以下文章

数独高阶技巧之八——SDC

简单Python入门技巧

链表及其简单应用

编程如此简单:贪心算法及其应用

编程如此简单:深度优先搜索及其应用

Go 语言入门很简单--技巧和窍门(Tips and Tricks)