☆定义
唯一余数法是最基础的几种方法之一,它是指一个单元格内有8个数字无法填入,那么其必然是余下的那个数字。
这是最基础的方法之一,也往往是最容易被忽略的一种情况。最基础的情况是:一行(列、宫)内填入8个数字之后,剩下的一格便可以填出来。然而唯一余数实例往往较难。例如下题已经到了难点,经过仔细观察后发现,星格内仅能填入9,因为其他数字都在该格所在行、列、宫中出现过了。
唯一余数不仅有单纯依据已知数字或填出数字进行排除的,更有一些是通过数组和区块进行排除的。该内容在区块和数对部分会进行讲解。
☆定义
区块排除法是基础方法中极为重要的一种,在绝大多数初级以上的题目中,都需要使用这种方法。
区块方法一般指:利用一个构造出来的含某个数字的区块,对区块所能影响区域内其他格该数字的排除。
例如下面这种情况:
图中第一宫的5在椭圆形区域(C1和C2)之中,该区域影响C行其他格,那么无论是哪种情况,这些格中的5都能被排除。
于是在这道题目中我们可以看出,因为一宫的5区块进行排除,排除掉C7、C8、C9的5,那么三宫之中,5在星号标记的格中。
☆作用
既然讨论了什么是区块,接下来就该讨论怎么使用区块。在基础的题目中,一般区块的作用就是三种类型:①排除。②数组。③唯一余数。用的最多的是排除,对观察能力是个考量。至于后面两种类型,如果对区块的标记恰当,观察起来会更容易一些,前提是这两个技巧自身得过关。总而言之就是一句话:关于怎么用区块并不是很难的问题,难点是怎么找区块。
☆观察
找区块这种事实际上是对经验水平要求比较高的,刚开始接触这一步的时候很多人会极其陌生,出现能理解但就是看不到或看得很慢的情况。对于这种情况,主要方法就是练习。练习是通过理解区块的原理和构造,加快寻找区块的速度。次要方式是通过对标记习惯的熟练与完善,达到水平的提升。
这里总结了一些常见的区块模式,分为单排除区块和双排除区块两种。
☆常见类型
单排除区块:只做一次排除形成的区块。
类型1:直线型
直线型是最基础的区块类型,也是最常出现的区块类型之一。
类型2:直角型
此种类型对观察难度的要求有些提升,也经常出现。
类型3:T型
该类型本质上和直角型是相同的,但是标注起来可能会更不方便。
类型4:中央型
中央型也是极其常见的类型,请务必注意。
接下来是双数排除形成的区块。
双排除区块:在横纵两方向上各做一次排除形成的区块。
类型1:十字型
极其容易出现的类型,在中级题目里出现得尤其多。另外就是提示数比较少的题目里出现得也比较多(一些网站上有最少提示数的数独题库,难度各异,但普遍来讲这种类型的区块是大量出现的)。一般一个宫内数字较少且有至少两数字相邻的时候,出现的频率还是很高的。
类型2:伪十字型
比十字型多了一个数,但是观察难度往往会更高一些,因为十字型按照数字形状分布往往更容易找。伪十字型在题目中也很常见。
类型3:工字型
此种算是比较不好找的类型了,但还是很常见,所以练习的时候一定要多加注意。
基础区块类型就这么七种。进阶版有双区块(连用两次区块),大家可以自行体会,道理类似,此处不赘述。
另外图中所示仅为范例,几种区块图示在旋转、翻转或以一定规则更换数字后依然有效。
☆标记
刚才上文提到了区块的标记。区块的标记一般用于观察到区块,但是并没有直接得到有效结论,所以可以先做标记,方便后期观察。
一般区块的标记以邻线标记数字比较合适,例如:
这样也能加深对区块的理解。
但是,关于不相邻的格子形成的区块和三个格的区块,这种标记法的弊端就显现了。这种情况下可采用的方法是:在最左(上)侧进行数字标记;用小数字在相关格内标记等。
☆区块与排除
在这个例子里进行观察,可以看到四宫D2和D3的4区块,能排除D7的4。由列排除,可以得到H7=4。
☆区块与行列摒除
观察此题。通过对数字2进行行列摒除可以得到:
对3列摒除得到B3C3的2区块,再通过宫摒除A2;同时观察A行的2,经过摒除后得到A5=2(六芒星处)。
☆区块与行列摒除Ⅱ
在这个题目中,对数字7进行观察。首先观察第四行,得到7在D7和D9之中,因此E8和F8的7被摒除。其次观察第8列的7,得到C8=7。
☆区块与唯一余数
这是一个区块技巧与唯一余数结合的例子。仔细观察第一列,对数字6进行摒除,得到四宫关于6的区块(椭圆形标出)。排除同一宫的D2=6后可以通过唯一余数得到D2=9。
如下图所示:
☆什么是数组
当一个单元(行、列、宫)的某n个数字仅在该单元内某n格中时,称为该单元内该n个数的数组。同一行、列或宫中出现数组,则其他格不能再出现该数组中所含的数字。
数组分为显性数组和隐性数组。某N个数一定在位于同一单元内的某N个格中,为隐性数组。
☆图示
观察B行,通过对数字3和4进行排除,得到该行的3和4在椭圆形区域之内,顺序不确定,但必然其中一格是3,另一个格是4。这意味着两件事:
①这两个格内不可能填入别的数字,因为尽管顺序无法确定,但这两格的位置已经完全由这两个数字占据。
②这两个格所共同影响的区域不能再填入这两个数字。
在此题目中表现为:椭圆形区域内只可能存在3和4,而第三宫和B行内其余单元格不再可能出现3和4。
仔细观察H行的数字1和2,显然它们在圆方形区域之中占据位置。同样思路可以看第七宫的1和2,它们占据了两个阴影格,形成了1和2的隐性数组。
☆实例1
在实例1中,我们可以仔细观察。观察第一宫可以发现,A2和B2构成5与7的隐性数组,占位之后,可以得到B1=6,如下图所示。
☆实例2
在实例2中对H行进行观察。通过对数字3和8进行排除,得到行内的隐性数组(如下页图阴影格)。数组占位,得到该行中9只能在星格位置。
☆实例3
观察实例3,很明显有B7,C7是1与4的隐性数对(7列),那么观察第三行可以知道C3和C8则是2与7的隐性数对。于是C4,C5,C6形成了含6和9的区块,加上一宫里的1区块,得到星格内唯一余数A5=8。
☆图示
图中很显然可以观察到,A行椭圆标记的两格由3和4组成(顺序不确定),为上一节提到的隐性数组;菱形格则是由8和9组成的(顺序同样不确定)。但是区别在于:椭圆格的数组是两个数只能在两格,而菱形格的数组是两格内只能有两个数。对于这种数组,我们称之为显性数组。实践中,多数题目中隐性数组更容易观察。在一些难度偏高的题目里,经常会出现观察难度极高的显性数组,因此两种数组技巧都必须练习纯熟。
☆Q&A:为什么隐性数组更容易观察,却是隐性的?
这是因为在数独发展的早期,很多技巧是需要计算机的。计算机算法与人脑算法不同,第一步即是自动生成每格的候选数,因此,显性数组在候选数生成之后能立即被计算机察觉,而隐性数组则需要经过多一步的排除之后才能出现,因此通过排除形成的数组称为隐性数组,而通过唯一余数形成的数组称为显性数组。其实并没有必要,对于一个还剩m格的行,确定其中n格是个数组,那余下的就是(m-n)数组了。
☆显性数组
此题中出现显性数组最常见的使用形式。即C4,C5,C6的2,3,7显性数组,删除宫内其他格内2,3,7,得到B5=8。
☆实例:显性数组与排除
在这个案例里我们可以很明显地看出D9,E9关于4与5的显性数组。这个案例里不仅能够排除A9和B9的4,也可以与A7的5一同对九宫排除得到I8=5。
☆实例:显性数组与唯一余数1
观察第九列,很容易得到隐性数组2与6,得到F6=4。而观察显性数组可以得到A9,D9,E9的1,5,8显性数组,用唯一余数得到F9=4,可谓殊途同归(个中缘由大家可以自己想一下)。
☆实例:显性数组和唯一余数2
这是一道数独题目的局部。仔细观察可以看出,A2,A4,A6形成6,7,9的显性数组,进而通过唯一余数法可以知道星格(A1)内是8;九宫内G8和I8形成1和9的显性数组,那么通过I行对唯一余数进行观察可以看出六角星所在格(I7)是5。如下图所示。
☆显性数组和唯一余数3
经过六宫7和9的显性数组和8行1,3,6,7的显性数组,得到唯一余数H7=5。
☆实例:显性数组和区块1
容易看出H行5,6,7,8四数组,其中6仅存在于H5和H6之中,构成了基于显性数组的区块。由该区块,可以删除I4的6。得到I4=7。如下图所示。
☆实例:显性数组与区块2
首先是4列3578(蓝色格内)的显性数组,删除A4的8,在第二宫形成A6和B6的8区块。该区块删除F6的8,得到第六行F1F2的8区块,对第五宫内8进行删除。此时观察3列,则仅有A3=8。
☆实例:显性数组和区块3
此题中,H行2378显性数组,删除H7的3,得到九宫3区块,得到七宫G3=9,H3=3。
☆显性数组和隐性数组
此题中首先可以注意C7和I7形成了4与6的显性数组,因而得到六宫之中D8,D9,F9是569的隐性数组,故而形成E8和E9的4区块,得到五宫F5=4。
☆定义
一个正规的数独,必然有且只有一个答案。若是某种条件(称作条件A)下,盘面内存在两种及以上的可能情况,并且无法排除其中任意一种,那么会与题目规则违背,因此条件A是不成立的。
常见的唯一性解法有唯一矩形法和Bug法两种,并以唯一矩形法居多。
☆唯一矩形
当盘面内形成如上图中所示的矩形的情况下,这四个格内的ab有两种可能分布。这种情况叫作致命模式,因此,无论如何要避免这种情况的发生,以此做出的删减,叫唯一矩形删减法。
☆实例1
在这个题目中,B3和C3是8与9的数组;A7B7C7是789的数组。此时如果A7=7,则B7C7形成8与9数组,与B3C3构成矩形。由上面的讨论,要避免这种矩形的出现,那么A7不能为7,由列排除得B7=7。
☆实例2
一个比较难观察的实例。第四宫E2E3为2与6隐性数对(宫摒),I3的候选数为2与6(唯一余数),且I2I3中必有6。那么,为了避免这种矩形的产生,有两种途径:删除I2I3中的候选数2得I3=6,或删除I2的候选数2与6得I2=9(唯一余数)。
☆分类
唯一矩形依据其机制分下面几类,其中以类型2和3最为常用。
类型1:
左边ab数组已经确定,右边ab确定在三格之内如图。为了避免形成致命模式,星格内一定是ab之一。
类型2:
左边ab数组,右边数字a限定在两格之内,因此这两格内没有b,否则形成致命模式。这是最为常用的一种。
类型3:
左侧ab数组,右侧一格内候选数为ab,那么删除另一格内的候选数ab。通常情况下删除以后会出现唯一余数或是数组。
类型4:
左侧为ab数组,右侧两格内候选数都是abc,那么这两格中必然有一个c,通过形成c的区块对其他区域进行摒除。
类型5:
左边一列内ab形成显性数组,右边一列内a仅在此两格之中。这种情况下,右边一列这两格中不能含b。
☆实例1
右侧B9和C9是2与5数组,B5和C5是必含2的区块,构成了类型2,因而排除该区块中的5。由列排除,此列5在E5。
☆实例2
观察四个蓝色格,右侧两格是7,8数组,左侧两格内是8的区块,构成类型2,因而删除区块内的7。由列排除知6列E6=7。
☆实例3
观察第二宫的4与9数对,第一宫内有一个即将成为4,9的数对。这是类型3的典型案例,易知A2=2。
☆唯一矩形的误区
唯一矩形绝对不能将四个数处于四宫之内!
有人提出A5A7和H5H7的5,6可以构成唯一矩形,得G5为8,这是不正确的。唯一矩形的条件是:盘面内存在两种及以上的情况并且无法排除其中任意一种。然而当四个角分别处于四个宫时,依据宫排除,可以排除到仅剩唯一解,是与唯一矩形的条件矛盾的。
Bug删减法是唯一矩形的极限情况,即对全盘未知数使用唯一矩形。
唯一矩形的核心思想是避免出现那种删无可删导致多解的情况,Bug删减法的核心也在于此。Bug删减法的全称是Bivalve Universal Grave,直接翻译是双壳全体坟墓,简称Bug,不仅是简称,而且是与其致命模式一样不可以出现的表示。
使用该技巧必须处于绝大多数格内都只含两个候选数,只有少数格内多余一至两个候选数的情况。如果非只含两个候选数的格过多,建议不要使用该方法。
☆Bug删减法严格表述
有唯一解的数独不可能出现如下情形,即每个未知格有且仅有两个候选数,且每个候选数在相同的行、列、九宫中只出现两次。
☆用法
①删除某个格子的候选数A会出现上述情形,就可以确定那个格子一定是A。
②删除某两个数字A和B(不一定在同一个格)会出现上述情形,那么这两个数不能同时删除。如果有一个事件M让A和B同时被删除,那么M一定不成立。
③如果有某n个数字A~N,全部被删除时会出现上述情形,那么这些数字必然有至少一个是成立的。
☆实例1
在这个案例之中,首先可以确定的是,全盘的未知格中,除了F9之外均只含两个候选数字,符合Bug删除法的使用条件。那么显然,关键数字就在F9之中。很明显可以发现,删除数字1之后,形成了跨四个宫的Bug,是不应该出现的。那么就意味着数字1是不能被删除的,这一格是数字1。这种离Bug仅有一个数字区别的模式,称为Bug+1。
Bug删除法的前提是盘面内未知格中仅有极少数不是双候选数,并且那些仅有两个候选数的未知格还要符合“每个候选数在相同的行、列、九宫中只出现两次”的条件,因此Bug删除法是相当罕见的,可能1000道普通的题目里才有一道。
☆定义
Xwing,又名二链列。用一个简单的图说明如下。
如上图所示,第二列的3必然在两个五角星格内,第八列的3必然在两个心形格内。那么只有两种可能,即左上(C2)取3,同时右下(G8)取3;或者左下(G2)和右上(C3)取3。无论哪种情况,C行和G行的其他格里,都不能是3。在此基础上,可以对一些宫进行摒除,或通过寻找出一些受影响的单元格摒除3之后的唯一余数或数组来解开下一步。
Xwing的使用条件:某数在某两行里可能所在的位置必然在某两列之内,或某数在某两列里可能所在的位置必然在某两行之内。
☆实例1
在这个例子里,我们可以明显地看到,2列和8列对数字1形成Xwing,通过摒除得到A5=1,即六芒星处。
☆实例2
通过Xwing删除候选数2。此题中仅可以使用此四格Xwing,不能使用D3、D7和H3、H7构成Xwing,因为第三列除了D3和H3之外还有B3可能是2,不满足Xwing的使用条件,因此不能这么用。
☆Xwing与唯一余数
阴影四格构成Xwing,得星格是唯一余数1。
☆拓展和延伸
关于Xwing的拓展之Swordfish(直译名称是剑鱼)如下图。
观察数字3,其实是多了一个数字的Xwing。进行摒除。
☆剑鱼与排除
观察4的分布可以得到下图,结合D2的4进行摒除得到F行仅有红心处是4。
需要注意的是,上题中A9的3占据了剑鱼的一个格位。剑鱼的前提是:某数在某三行里出现的格必然在某三列以内。因此,在不改变前提的情况下,一些单元格可以适当缺损。
☆剑鱼与唯一余数
通过对8进行观察,得到星格内唯一余数是5。
这道题目,用之前的方法观察,很难看出有效的结果。
不过如果用XYwing就会很容易。
简单地讲,XYwing就是一种这样的结构,如下图:
三个格子里分别是xy,xs和ys。这样的话,无论左上角那个格子为x或者y,那么右下角的格子里都不可能是s,因为左下角和右上角的格子里无论如何都会有一个s存在。
☆XYwing应用
回过头来看刚才那道题目:
仔细观察这三个用粗线条框起来的格子。C6的6,7就是xy,而B4的5,6和C8的5,7就分别是xs和ys。用XYwing解题目,首先要确定出这样的构造,然后要找xs格和ys格共同影响的格子,并删除里面的候选数s。
在这个图里,表现为删除B7和B8的s,也就是5。然后再观察可以发现,三宫的5只可能存在于三个格之中,删除了两种可能,就只可能是在C8了。
通过XYwing删除候选数之后,题目的构造往往能够变化,结合基础技巧,就能很灵活地解开题目了。刚才这道题目,删除候选数之后,是通过宫摒除解开题目的;更多的情况往往是会出现唯一余数。当然还有一些例子,删除候选数之后能够形成显性数组。总之就是条条大路通罗马,删除候选数这一步是题眼,过了这一关之后,后期往往会轻松解开题目。
☆XYwing观察
我们不妨多看看几个案例。
左图是能一次性在两个地方删除数字的,你可以观察阴影三格;还有右图,这是非常常见的情况,当你在快做完卡住时,往往都是这种情况。
删除B2和C8的2
删除I4的9
你可以试试不标候选数观察下题。
Tips:
哪怕是在六阶数独之中,不标候选数观察XYwing,也是有难度的。所以当题目有难度时,除非记忆力极好,否则该标的候选数还是应当做出标记的。
在有候选数的情况下对XYwing进行观察,必须要注意仅有两个候选数的格(即双值格)。这一点是非常关键的。在解题时,需要注意的是,在多数题目之中,XYwing往往出现在一个拥有很多双值候选的盘面上。如果盘面内多数未填出的单元格内候选数都是两个以上,不建议对XYwing进行观察。
☆定义
链是用来表示两个命题间关系的符号,用来记录数字与数字间的存在关系,是高级技巧的核心内容。具体而言,对两个命题A和B做如下规定:
①若A&B不能同时为假,即为强链,记为A==B;
②若A&B不能同时为真,即为弱链,记为A—B;
这里我们研究的命题一般是“某个格为某值”类型的。
☆实例
先拿一例,分析强弱链。
图中ABCDE五条链。
对五条链进行分析:
A:B5(8)&B6(8)如果同时为真,那么就出现重复;如果同为假,这一宫就无8。所以这两个命题既呈强链又呈若链。此时仍然使用强链符号表示,即B5(8)==B6(8)。
B:D7(1)&D7(8)这一格只有这两个候选数。很明显不能同时为假,亦不能同时为真,同时呈两种链的性质。D7(1)==D7(8)。
C:G6(1)&G9(1)不能同时为真,但可以同时为假,呈弱链。G6(1)—G9(1)。
D:H5(1)&H5(9)同一格内,可以同假,呈弱链。H5(1)—H5(9)。
E:F5(4)&F7(8)比较特殊的结构,不能同假(否则出现两个1),亦不能同真(否则F2无数可填),因此同呈强链和弱链的性质。F5(4)==F7(8)
在一个数独之中,因为终盘是唯一固定的,故而对于任意两个“某格==某数”的命题,必然是“一真一假”“同真”或“同假”,前两者都是强链,第一种情况和第三种情况都是弱链。
链之所以为链,是因为它有能像链条一样串起来使用的性质。常见的链分为两类,即单数链和多数链。
单数链,顾名思义是指针对一个数字的位置关系进行强弱链的判断。常见的单数链一般是由奇数条链构成的环,其中又以五条链构成的居多,因为形状似鱼,这种方法称之为TurbotFish(多宝鱼)删减法。
多宝鱼往往是由数条行列内的链和一条宫内的链构成,其实是一个长歪的Xwing。
看下面这个题目:
对数字7进行观察,第一行中7仅可能在A5和A8,记强链A5(7)==A8(7)。同样,第六行记强链F5(7)==F7(7)。列内弱链A5(7)—F5(7)。
那么将上面三条链串起来得到:A8(7)==A5(7)—F5(7)==F7(7)。这是一条长度为3的7的单链。由链的性质,A8(7)和F7(7)不能同假,即它们是强链。
在此基础上,假设一个命题M,M和A8(7)以及和F7(7)都分别是弱链的关系。那么引入链条成为环:M—A8(7)==A5(7)—F5(7)==F7(7)—M。由此基础上引入刚才的简化:M—A8(7)==F7(7)—M,由强链的性质,可知M必为假。
那么在此题中有哪一个命题是与A8(7)以及F7(7)都分别呈弱链的关系呢?这种情况下就需要找两个能共同影响的单元格。因为这两格不在同一行列,所以共同影响区域(即目标格)必然与其中某一格同宫,与另外一个格同一行列,也即其中一格对另外一格所在宫进行行列摒除,所能影响的数格即是目标格。在此题中,A8对F7所在的第六宫进行行列摒除,能影响D8格,因此D8格即是目标格,删除D8格(即星格)内的7,得到D8=3的唯一余数。当然亦可通过F7对第三宫进行摒除删除B7的7,不过对解开题目没有太多的帮助。
☆简化推论:对于仅考虑一个数字在盘面内位置的单数链而言的方法:
Tip1:A==B—C==D等价于A==D
Tip2:M—A==B—C==D—M推论得,M必为假。
Tip3:寻找M,往往在A对D所在宫能够影响的格中,或者D对A所在宫能影响的格中。
观察一条比较长的链。在下图中对数字1的单链进行观察,出现一条1的单链,删除D5和E5的1,五宫中仅有F4=1。此处实为7条链。
☆Grouped链(区块链)
和基础的链一样,不过部分元素是区块。
☆实例1
这是一个极其有趣的盘面。将椭圆形两格看成一个整体,观察数字4形成含区块的链:C5(4)==C1(4)—D1(4)=={D4,D5}(4)。
与普通的单数链思路相同,我们需要找一个事件M,它与链两端的事件都是弱链关系。也就是找链两端共同影响的区域。很明显这个区域是F5,即可以删除F5的4。
删除之后会发生什么呢?判断F5格剩余的候选数,删除4之后是2与6。注意同一行的F9的候选数也是2与6,也就意味着通过链删除之后形成了2与6显性数组。那么这个显性数组又有什么用呢?答案很明显:能够让F7出现唯一余数1。
☆实例2
在这道题目里,对数字2进行观察。可以发现一条单数链:
通过链我们删除了F6的2。这有什么后果呢?
显然可以发现五宫中D4和F4组成了2和8的隐性数对。占位排除,得到F5=4。
☆实例3
此处使用的链之中,包含了两个区块。
删除星格的8,得唯一余数5。
☆唯一矩形和链
首先观察左边三宫。为了避免出现1与4在三宫内的唯一矩形,得到结论:{E1,E3}(4)==I1(4)。那么删除强链两端共同影响的区域内的数字4,得D1=1。
最常见的多数链是ab-bc-cd-de-…-na的类型,最典型就是XYwing。这种情况下,删除长链首末两格共同影响格内的数字a。
多数链通常情况下会是三到五条,但也会出现更多条链的情况。这种情况比较难观察。但无论如何要重点注意找仅有两个候选数的格,并清楚分析其中的联系。最简单的多数链是XYwing,仅是三个数字,复杂一些可能更多,例如下面一题:
以B2,D2,D5,D3,B3的顺序观察,那么可以得到一条长链:
B2(6)==B2(1)—D2(1)==D2(3)—D5(3)==D5(7)—D3(7)==D3(4)—B3(4)==B3(6)
那么代入模式中,易知ab-bc-cd-de-…-na中首末两格中的a即是此处6,那么删除首末两格共同影响的格中6,得C2=9,继而仅使用排除法即可以突破全局。
在此题中,有些地方既是强链也是弱链,然而仅用弱链即可得到推论,所以此处使用弱链表示。
Tips:
☆强链也一定是弱链?
强链指的是不同假,弱链指的是不同真,它们并没有交集,没有包含关系。在基础性的链里面大部分情况下的强链正好也符合弱链的定义,但并不是强链包含弱链。而一些链的拓展中,的确存在是强链而非弱链的情况。
☆还有什么链?
还有一些暴力链(Forcing chains)、动态链、Nishio链等说法,这些是针对非逻辑解数独提出的方法,主要是用于解开超难题,需要通过试数或计算机分析得出,此处不予赘述。