第 24 讲:欠一数组
在之前我们经常提起数组,还说数组可以出现“待定”的状态,那么现在我们将学习一种新的技巧板块,叫做待定数组(Almost Locked Set,简称ALS)。
今天我们要讲的是第一种待定数组的使用模型:欠一数组(Almost Locked Candidates)。
Part 1 欠一数对(Almost Locked Pair)

如图所示,如果r9c6 = 1的话,就会发现,r7里只剩下r7c3 = 1;而如果r9c6 = 6的话,r7c3 = 6,所以不管r9c6填什么,r7c3就填什么。而r9c6只能填入1或6,所以r7c3就只可能填1或6。
而其它的删数又是怎么回事呢?仔细观察r7和b8的交集,这三个单元格里也有1和6的位置。如果r9c6是1的话,在这三个单元格里,必然也会产生一个6;因为r7和b8里都只剩下这几个单元格能放下6了;同样地,如果r9c6是6的话,那只有这几个单元格里能放下1。换而言之,不论怎么填,在r7和b8里都将产生1和6的数对结构;而拆开来看,r7c456又像是区块一般。所以,b8里的其余单元格将不能放下1和6;而r7c3则是只能放下1和6,其余候选数也应当删除掉,所以总的结果就是图上那样。
这个结构称为欠一数对(Almost Locked Pair,简称ALP),不过实际上,因为也可以拆开来看,把r7c456视为区块理解,所以这个技巧的英文名称则为Almost Locked Candidates,而Locked Candidates就是区块,Almost即待定的意思,所以技巧名也直译为“待定区块”。接下来我们来看一种ALP的变体。
Part 2 欠一数对的拓展模型
拓展构型理解起来没有标准类型容易,所以我们将给出比较多的例子提供参考。

如图所示,和刚才的推理大致相同。假设r9c7 = 2,则因c9只能在r4c9放下2,所以此时r4c9 = 2;同理的话,r9c7 = 7,则r4c9 = 7。所以r4c9的填数只可能放2或者7;同理,在c9和b9的交集里,还能放下2和7,这使得b9里的其余位置都不能填入2和7,因为r9c7填一个数,那么这三个单元格里就必然会产生另外一个数的填数。
那么,为什么可以删除4呢?因为c9里此时因为r4c9删除了除了2和7的候选数,使得数字4在c9里形成区块,所以b9里不能再填入4,所以b9里其余位置都不能放4,于是删除掉它们。
这个结构除了ALP以外,还带有一个4的额外区块结构。不过,实际上这种构型并不仅仅这么简单,我们再来看一些例子。

如图所示,我们率先可以看到,r1c6只有1和6。我们尝试对b3进行1和6的位置的查找。此时可以发现,在b3里能放下1和6的地方此时只有r23c7。这一点我们依然使用之前的逻辑,假设r1c6是1,然后就可以得到r23c7里必有一个是1;而r1c6是6,也可以得到r23c7必有一个是6。不过此时我们依然不能随意下结论。因为目前来说,我们并没有区域能够产生我们需要的1和6的数组。
不过我们注意到,b3里只有r23c7和r3c9这三个单元格可以填入5和8,这便使得r23c7和r3c9里必须有一个5和一个8,那么剩余一个单元格放多少呢?显然只能是1或者6了。因为刚才我们通过逻辑得到,r23c7里必须得有一个1或者6,但现在这两个单元格里必然会有5或者8的出现,这使得此时r23c7里只剩下一个单元格可以放1和6了。显然,如果r23c7都放下5和8的话,1和6就没地方可以放了,所以我们可以得到r23c7里必须放进去一个1和6。
不过,这样一来,5和8出现在r23c7和r3c9的其中两个单元格,而剩下的唯一一个单元格又必须是1或者6的其一,所以这三个单元格显然就不能填入其它的任何候选数了,所以我们可以安全地删除掉它们;与此同时,r1上由于r1c6是1或者6的缘故,而r23c7会根据这一点要求确定出与之相同的填数,所以r1c78里必须填入的是与之互斥的另外一个数。换句话说,如果r1c6是1,那么根据刚才的要求,r23c7里必须有一个1,而r1c78里就必须有一个6了,因为b3必须得有一个6,而6能填的位置此时只剩下r1c78了,r23c7里虽然还剩下一个单元格,但它被留下来放5或者8了。
接着我们再来一则和上述逻辑完全一样的例子。

假设r5c4是3,则在b2里能放下3的位置只有r2c5;而当r5c4是9的话,则r3c56里必须有一个是9。不过我们此时不能得出结论,就需要进一步的逻辑。
此时我们看到,b2里能放2和5的位置此时只有r2c5和r3c56三个单元格。显然,这三个单元格里肯定得放一个2和一个5,那么还剩下的一个单元格就必须按照刚才的规定放下3或者9的其一。但是很显然,由于这三个单元格只能放下2、3、5、9的数字的其三,跟其它的候选数无关,所以1、4、6、7、8出现在这三个单元格的候选数情况都可以删除掉;与此同时,由于r5c4假设的数字的关系,r23c4里就必须有一个单元格填入3和9的另外一个数了,否则这个数将放不到b2里,导致问题的出现。
所以,c4上依然可以产生一个3和一个9在r235c4三个单元格之中,因此其余单元格的3和9都可以删除。

如图所示,这一个示例和之前的逻辑也都大致相同。只是这里涉及的额外的那些数字从两个变为3个。
首先我们观察到的是r6c9只能放入4和7,如果假设它为4,则观察c7,可以看到4和7的位置此时只有r789c7。而仔细观察,c7里r5789c7四个单元格里必须要放下一个1、一个2和一个8(因为只有这些单元格可以放下1、2、8),所以四个单元格里最终只剩下一个单元格,但这个单元格实际上又必须放下4或者7,因为这是我们刚才得到的结论。所以,这四个单元格里显然只能放入1、2、4、7、8的其四,故其余的候选数都可以被删除;与此同时,r46c7的其一必须放下4和7的、和r6c9填数互斥的另外一个数。所以,b6里一定会有r46c7和r6c9里又一定会出现4和7,所以删除掉b6里其余位置的4和7。
这一些示例都比较难理解,而且比较绕。我们最后列出一些例子,希望你能理解并且尝试自己理解它们。




这四个示例都比较经典,但也都具有挑战性。
Part 3 欠一三数组(Almost Locked Triple)

如图所示,这一个示例好像是扩大了“数组”的规格。我们假设r1c45分别填入1、6、8的其二,而观察c6就会发现,此时填入的这两个数只能放在r79c6,因为其余位置都没有位置可以放下这两个数了。而在b2和c6的交集里,由于刚才假设的是1、6、8的其二,所以在此交集里,必然会出现的是最后剩下的那一个数。所以,b2和c6都会产生三数组结构,也因此,b2里的其余单元格都不能填入1、6、8。
这个结构运用了三数组,所以称为欠一三数组(Almost Locked Triple,简称ALT)。
接下来我们再来看一些类型的示例。
Part 4 确定值构型

如图所示。和前文介绍的类型不同,这个欠一三数组带有一个提示数r1c4的数字1。这个如何推理呢?发现r3c4只有候选数7和8,不论它是7还是8,数字1在b8内都只有r78c6两处可以放。此外,数字7和8在最初假设r3c4填入的时候,b8内和c4出现交集的r78c4两个单元格也是不允许填入这个数字的。举个例子,如果r3c4是7的话,那么r78c4就不能是7;如果r3c4是8的话,也是同样的道理。
接着观察r78c6,由于刚才的假设r3c4的填数已经成立,所以r78c6里必然会有一个数字是填入原本这个假设的数字的;但是,这两个单元格里必然还需要出现一个1,所以r78c6自然不允许填入1和7或8其一以外的其它数字。换句话说,也就是r78c6不允许出现1、7、8以外的其它数字,所以可以排除掉它们。与此同时,r2c4也不能填入7和8了,这是因为,一旦我们定下r78c6里必然会有r3c4填入的数字的话,那么7和8里另外的一个数就必须在b8里出现在r78c4里。所以这样一来,这个7和8其一(r3c4)和另外的数字(r78c4的其一)就可以构成关于7和8的显性数对,故位于c4的其余单元格就不再可以填入额外的7和8了,因此可以排除掉它们。
下面我们再来看一个例子。

这一题和上一个题目的推理逻辑类似,你可以尝试进行类比推理。
实际上,ALT并非这么简单,既然ALP拥有拓展构型,那么ALT也是有的,下面我们就来看一下这些例子。
Part 5 拓展构型

如图所示,可以发现r12c7里一定放下的是2、3、7的其二。显然,此时这两个数在r89c7里就不会出现了。但是观察b9,可以发现这两个我们假设的数字此时只能放在r7c89和r8c8里,而此时这三个单元格里必须得有一个是5(因为此时b9里只有这三个单元格可以放下5)。所以,这三个单元格此时的形式就只可以是一个5和两个2、3、7的数字,但这些数字跟1、4、6、8、9这些数字都没有关系,所以自然都可以删除掉;与此同时,和刚才的逻辑一样,c7也可以删除2、3、7,是因为r89c7里必有一个2、3、7,而这个数恰好必须是和r12c7的两处填数不同的剩下那个数。

这一个示例和之前的示例一样,所以我们就不作过多的描述了。
另外从理论层面上说,欠一数组本身不包含四数组形式,因为欠一数组实际上可以视为区块处理,而区块是无法涉及四个单元格的,所以,所谓的欠一四数组实际上并不存在(或者说即使有结构,也会被其它技巧代换掉,或者是降阶)。但实际上,欠一数组结构依然具有四数组类型,但它出现频率极低,而且标准类型没有例子,所以我们不得不从确定值类型开始入手讲解。
Part 6 欠一四数组(Almost Locked Quadruple)

如图所示,我们注意到,r12c7一共只有2、3、7三种数字。我们任意假设两个单元格填入的数字(假设用字母a和b表示),那么a和b最终能够在b9里填入的位置只有r7c89和r8c8三个单元格。
但是注意到,数字5在b9只能放在这几个单元格,因此这三个单元格必然只能是a、b和数字5。而a和b是2、3、7的其二,所以最终这三个单元格应当只能填入2、3、5、7的其三。所以,这三个单元格不应当填入其它的数字,把它们都排除掉;与此同时,2、3、7里a和b放入了这三个单元格后,2、3、7里最后剩下的那个数字只能被放入到r89c7里,所以c7里依然也可以产生一个2、3、7的三数组结构,因此c7其余单元格都不能填入2、3、7,依然可以删除掉。这一则示例的推理方式比较奇特。我们再提供两则示例。


你可以参照这两则示例来自行推理。
Part 7 欠一数对的直观视角
可以看到,这些示例的结构都还比较简单,下面我们来介绍一种可以通过直观层面看到的方式。

我们假设r9c6 = x(注意,我们这里利用设未知数x的方式来假设,此时x是1和6其一),可以发现,所有x值可能的情况都不可能放在r7c128上。除了同时在b8的r7c45外,只剩下r7c3一个单元格。所以,r7c3 = x,故得到r7c3里非x的删数;同理,b8里其余位置都不能是x。
这个思维视角使用了假设为未知数的方式来间接得到推论,这在数独技巧里称为代数(Kangaroo),而这个技巧在后面会详细提到。
Part 8 欠一数组的互补性
实际上,数组有互补,那么欠一数组就可以有互补,因为它们都借助了一点,即观察角度的切换,虽然说是切换,但实际上删数确实一致的,对于这一点,我们在数组和标准链列里已经深刻体会到了。那么欠一数组的互补是如何的呢?我们可以先来看看一些示例。


如左图所示,这是一个欠一三数组的拓展类型示例,我想,这一点我们将不用过多去介绍它的删数逻辑了。由于结构涉及r7和b9,所以我们尝试把r7里的两处放1、6、7的单元格进行互补视角的转化,去掉它们,而取而代之的使用删数的单元格(而r7和b9的交集,即r7c789我们目前不用处理)。另外,b9也进行同样的视角转换操作,于是我们就可以转化到右图的形式。
可以看到,右图就将欠一三数组转变为了一个欠一数对,而且删数完全没有发现变化。你可能会问我为什么如此神奇,实际上在视角转化的时候,利用的就是显隐性互补的模式,我们把没涉及到的单元格全部勾选了出来,而把涉及的全部无一例外地都去掉了。

技巧信息
欠一数对:难度4.5。
普通类型:没有附加难度。
确定值类型:4.5+(确定值个数*0.1)。
欠一三数组:难度5.2。
普通类型:没有附加难度。
确定值类型:5.2+(确定值个数*0.1)。
欠一四数组:难度5.7。
普通类型:没有附加难度。
确定值类型:5.7+(确定值个数*0.1)。
拓展类型和确定值类型的计算方式类型,只不过看的是里面的“紫色数字”有多少种。
名词解释
欠一数组(Almost Locked Candidates):今天讲的技巧类别。当前这个类别我们是按照数组的模式来讨论的,但在外国的一些资料上,它们是使用区块来拓展的,所以它们在取名的时候带了一个“区块”(Locked Candidates)。