这里对数独一些不太难的技巧进行了概况,全部掌握的话,就能尝试做高级或一部分骨灰级难度的题目了(大概)。
规则
数独盘面是 9×9 的网格。使用数字 1 到 9 填充所有的空格,使得:
- 每个3×3 宫中的数字不重复。
- 每一列中的数字不重复。
- 每一行中的数字不重复。
为简化表述,约定一些名词。
盘面:当前整个数独。
盘面内元素有:单元格(简称格)、行、列、宫(粗线包围的3×3的区域)。
区域:某一行或列或宫。
候选数:当前格内所有可能填的数的集合。
删数:根据推理删掉格内某个候选数。
出数:根据推理在格内填入数字。
坐标写法
约定坐标的写法:用 r 表示行(从上到下分别为r1至9),用 c 表示列(从左到右分别为c1至9),用 b 表示宫(逐行从左到右分别为b1至9)。
策略分类
- 直观:通过观察盘面推理出答案。
- 候选数:通过标注候选数来辅助做题。
- 局部标记:一边做题一边标记。
- 全部标记:将每个格子可能填的数都标记出来。
基本技巧
基本技巧可以直接出数
排除 | Hidden Single
分为宫排除(Hidden Single in Block)和行列排除(Hidden Single in Row/Column)。
某个数字在某一个区(行/列/宫)里仅有一处可以填。
图中黑色数字为盘面,绿色数字为推理得到的结果。橙色格子为用到的条件,红色格子为通过条件有删数的格子,绿色格子为最后出数的格子。
上图中,对于b6,r4c2和r6c5中的2导致r4c89和r6c789不能填2,所以b6内只有r5c8可以填2。
同理,上图中,r9中只有c4能填4。
唯一余数 | Naked Single
对某一格进行点算(Full House),就是在宫行列中依次寻找数字1、2、3,一直到数字9。上图中,对r9c8进行点算后发现这个格子只能填6。
有些唯一余数在直观策略下不易发现,通常我们会优先聚焦于已经填了比较多数字的区域。但这种方法不会一直奏效,我们需要持续培养自己对数字的敏感性。
进阶技巧
区块 | Locked Candidates
有时通过排除法,我们没法将某个数字的可填范围缩小到一个格子,而是二到三个格子。但这依旧是有价值的,如果这两三个格子在同一行或列,我们称其为一个区块。
很多时候区块配合基本技巧可以出数。及时不能立即出数,将发现的区块做好标记,也很有可能帮助到之后的推理。
宫区块 | Pointing
当某宫中某候选数只存在于某行(列)时,意味着在其他宫中此行(列)不能填该数。
如左图,对b6使用排除法能确定数字1只能出现在r6,所以b3、b4的r6均不能再填入1。再如右图对b4使用排除法即可出数。
行列区块 | Claiming
当某行(列)中某候选数只存在于某宫中,意味着此宫中其他行(列)不能填该数。
例子待补充
数组 | Subset
一个区域内,当某n个单元格只能填某n个数时,形成显性数组。这个区域内其他格子不能再填入这n个数。
一个区域内,当某n个数只能填入某n个单元格时,形成隐性数组。这某n个单元格内不能再填入其他数。
由2、3、4各数字构成的数组分别称为数对(Pair)、三数组(Triple)、四数组(Quadruple)。
隐性 | Hidden
一个区域内,某n个数只能填入某n个单元格。
直观策略下,我们往往更容易发现这种数组。
左图中,b6 的 r46 不能填 6 或 9,那么 6 和 9 只能填到 b6r5 的两个空格中,形成数对。虽然尚不能确认具体怎么填,但一定是某一格填 6,另一格填 9,这两格中不能再填其他数。
再次在 b6 内利用排除法,能确定8的位置。
(死锁数组 待补充)
显性 | Naked
一个区域内,某n个单元格只能填某n个数。
全标策略下,这种数组比较容易发现,所以叫做显性数组。但是在直观策略下依旧能通过技巧找到一部分显性数组。
如左图,b6 中已有 268,c9 中已有 135,这两个区域的交集 r456c9 中只能填 479,形成三数组。再如右图在 b9 内使用排除法,可出数。
再如这张图,b4 和 b6 中相同的候选数似乎是出题人故意设置,提醒我们从这里找突破口,从而找到 b5 中的 14 数对。再在 c5 内使用排除法可出数。
简单鱼 | Fish
在某n个行(列)内,某个数字x只能出现在固定的某n个列(行)内,则该n个列(行)内其他格子不会再出现数字x。
n=2 时称为矩形对角线(X-Wing),n=3 时称为剑鱼(Swordfish),n=4 时称为水母(Jellyfish)。
如图,在 c35 中都只有两个空格了,我们能轻易发现这两列中的 1 还没有填,进而找到关于 1 的 X-Wing。此时,数字 1 在这四个格子中只有两种填法:①左上角和右下角填 1;②右上角和左下角填 1。无论那种情况,红色区域都不能再填 1。
简单翼 | Wing
先介绍一个概念,我们知道在同一区域(行、列、宫)的两个格子是会相互影响的,我们称这两格能相互看到(See)。
n个双值格(有两个候选数的单元格)都包含同一个候选数,也就是说这几个格的候选数分别为
、
、...、
。这几个格子能看到同一个单元格,且这个单元格的候选数为
或
(这个
被称为折点)。这个结构中至少有一个格子中的候选数
为真(也可以说至少有一个格子要填
)。
n=2 且无折点时称为 XY-Wing,n=2 且有折点时称为 XYZ-Wing,n=3 时称为 WXYZ-Wing,n=4 时称为 VWXYZ-Wing。
此类 Wing 结构的特点,就是多个包含同一候选数的双值格。
直观策略下,一般会先考虑已有数字比较多的区域。如果发现了若干个双值格,就可以尝试考虑此类结构。
如上图,在标出 b1 和 b7 的候选数后,能看到橙色和蓝色格构成 Wing 结构,两个候选数 3 之中至少有一个为真,这导致 r2c3 一定不能填 3。
对于其原理,我们可以利用反证法思考。假设两个候选数 3 全为假,则橙色格分别填 5 和 4,这会导致蓝色格无数可填,这是不可能的,所以假设是错误的。
简单链 | Chain
了解强链和弱链
若A为假,可推出B为真,则A到B为强链。
若A为真,可推出B为假,则A到B为弱链。
显然有以下推论:
同一区域内的相同候选数之间、同一格内不同候选数之间均为弱链。
若一区域内某个候选数 A 只在两格内出现,则这两个 A 之间为强链。若一个内只剩两个候选数,则这两个候选数之间为强链。
摩天楼 | Skyscraper
摩天楼由同一数字的两条垂直(或水平)的强链和一条水平(或垂直)的弱链首尾连接而成。
如图,我们能发现 c4 和 c7 中均只有两格能填 7,形成两条强链。且两条强链各有一端在 r8,形成一条弱链。三条链首尾相连,形成一条长链,可以按如下写法表示:
r1c4(7) = r8c4(7) - r8c7(7) = r1c7(7)
其中双线表示强链,单线表示弱链。这条长链有两个特点:①强链和弱链交替出现;②开头和结尾都是强链。
对于这种长链,我们按两种情况讨论:
- r1c4 填 7。
- r1c4 不填 7,则可以推出 r8c4 填 7,r8c7 不要填 7,r1c7 填 7。
两种情况下,r1c4 和 r1c7 中至少一格要填 7,所以两格的共同作用域(共同看到的格子,如 r1c9) 排除填 7 的可能性。
双线风筝 | 2-String Kite
双线风筝是由同一数字构成的链。包含一条垂直(或水平)的强链和一条水平(或垂直)的强链,且两条强链各有一端在同一宫。
多宝鱼 | Turbot Fish
多宝鱼是由同一数字构成的链。包含一条垂直(或水平)的强链和一条宫内的强链,且两条强链各有一端在同一行(或列)。
简单致命结构 | Deadly Pattern
唯一矩阵 | Unique Rectangle
标准数独应该有唯一解,利用这一点性质可以帮助我们推理。
标准型
像上图的情况,我们会发现蓝色格填1橙色格填2或者蓝色格填2橙色格填1都是可行的,这样就有两个解了。这种情况是不可能出现的,如果出现了,要不是做错了,要不是题目有问题
解题时,如果发现即将出现这种情况,应该将其破坏掉。
如图,如果r1c2填入1或2后,就会出现上面提到的情况,这是要避免的,所以要删掉候选数12。
通常,唯一矩阵在全标策略下容易使用,但是直观或局部标记策略下也可以找到一部分唯一矩阵。
c7和b6都只剩两个空格,于是在这些空格上点算,马上就能发现唯一矩阵,r1c8中的15应该删掉。
全双值坟墓 | Bivalue Universal Grave
当盘面剩下的所有空格里都只有两个候选数,且无法通过排除法删数时,这个结构叫做全双值坟墓(Bivalue Universal Grave),简称 BUG。
我们来分析一下这个结构的特点:
定义中提到两个基本特点:全双值格和无法通过排除法删数。
无法通过排除法删数,意味着每个候选数在同区域内至少出现两次。
其实,每个候选数在同区域内恰巧出现两次。下面我们简单证明一下。设一个区域内有n个空格,则一定有n种候选数。每个候选数至少出现2次,则该区域内候选数总数≥2n。若存在某候选数数量超过2,则该区域内候选数总数>2n。而全双值决定了该区域内候选数总数=2n,产生矛盾,所以不存在某候选数数量超过2。证毕。
全双值坟墓会导致什么后果:
盘面上已有数已经无法约束这个结构内部的填数了,只能从某个空格开始试数。
如一个空格有候选数{A,B},尝试填A,之后通过逻辑继续填下去,这会导致几种可能的后果:
- 出现矛盾,无解。
- 能填完,也就是有解。但该格如果填B的话,刚才所有填的格子全换成候选数里的另一个数,依旧是一个解,于是出现了两个解。
- 填了一部分后,剩下的格子无法通过逻辑推理出数,这时剩下的结构又是全双值坟墓。只能继续挑一个空格试数,依旧有三种可能的后果。直到最后出现无解或多解的情况。
总之,全双值坟墓会导致无解或多解。标准数独中不可能出现这种情况。
上图的盘面已经十分接近全双值坟墓,只有 r2c8 多一个候选数,所以叫做 BUG+1。这个多出的候选数是 2,因为根据上面的分析,全双值坟墓结构中每个候选数在同区域内恰巧出现两次,而 b3 中候选数 2 出现了3次。
若 r2c8(2) 为假,则形成全双值坟墓,这是不可能的,所以 r2c8(2) 为真。
高难的技巧
这里就不写了,大家去看高手们的教程吧。
【数独】标准数独技巧教程 6.0
啥都不懂的探长的个人空间
数毒吧