欢迎光临散文网 会员登陆 & 注册

第 40 讲:嵌套结构的环

2021-07-29 07:56 作者:SunnieShine  | 我要投稿

Part 1 ALS环

如图所示,链写法如下:

由于环可以任意端点起头,对应也可以任意端点结尾,所以我们的最后使用弱关系来表达它产生了循环:把最后一个节点写到链头上去。

我们按照最初的环的视角,来理解一下删数到底是怎么产生的。

首先是r3c4 <> 68。这一点很清晰,因为r3c4(2)和r3c4(3)是弱关系,环结构的其中一个特性是环内的所有弱关系共同对应的位置(交集)都可以直接删除,所以r3c4内其余候选数都可删除;

其次是r8c56 <> 23。这一点是因为r8c56(23)是分别处于r9c4(2)和r9c5(2)的弱关系所处区域和r79c5(3)和r79c4(3)的弱关系所处区域。所以b8和r9上其余位置的候选数2都可删除,而b8内其余位置的候选数3都可删除。当然了,r9c12(2)也就因为刚才说的原因被删掉。

那么,r58c5(56)呢?这个环根本就没涉及5和6,全是2和3。如果你这么想就错了。我们尝试观察ALS区域(r179c5)。之前的环结构内有一个特性:环内只有两种填数情况。这意味着每两个相邻节点的填数情况真假性一定是相反的。也就是说,r9c5(2)和r79c5(3)两个节点真假性相反,即:

  • r9c5(2)为真,r79c5(3)为假;

  • r9c5(2)为假,r79c5(3)为真。

只有这样两种情况。那么,如果r9c5(2)为真的话,ALS区域内必然有一个5、6显性数对,出现在r17c5;如果是r79c5(3)为真的话,由于这里是同一区域内的多个候选数3为真,所以不管是r7c5还是r9c5的候选数3为真,剩下另外一格都不应有候选数3(要保证只能有一个3为真,否则违反数独规则),然后和r1c5构成5、6的显性数对。

所以不管怎么样,都会构成5、6显性数对,所以c5内其余单元格都不应有5和6,删除掉它们。这也就是为什么最后还有一个r58c5 <> 56的原因。

那么,这种环结构嵌入了ALS,所以我们一般称这种结构就叫带ALS的环(Grouped Continuous Nice Loop With ALS)。接下来我再举一个例,请自行思考它的所有删数成立的原因。

Part 2 毛刺数组环

我们再来看带有一个毛刺数组的环结构。

如图所示,链如下所示:

首先,我们能找到所有弱关系的删数:r2c4(2)、{r1c9, r2c789, r3c8}(4);然后是r3的ALS的删数:r3c128 <> 7。接着我们来着重观察这个毛刺显性数对。

当r1c7 <> 4时,r16c7形成7、8数对结构,所以r5c7 <> 7,链得以继续下去。那么删数怎么看呢?实际上,我们就把它当成真正的数对来删数就可以了。为什么呢?我们只要保证环的两种填法下,都能产生7、8数对就可以。

当我们从示例这个环的方向来看,显然是构成数对的,所以这个情况成立;而另外一种填法正好就可以反向来理解。当我们反向理解的时候,假设从r5c7(2)开始,设为假。那么r5c7(7)为真,此时r16c7(78)的毛刺显性数对结构已经被破坏,所以毛刺显性数对节点此时是为假的,但是,数字8不得不填在r6c7里,因为r6c7是双值格,而此时r5c7 = 7,所以r6c7不得不填8。这样一来,c7就依然存在7和8,所以其余位置照样是可以删除7和8的。

看起来这里只是巧合,但实际上并不是。因为要构成毛刺显性数对,就需要一个单元格是恰好双值格的形式存在(比如{ab}),或者不是双值格,也要保证两个单元格有额外的数字要一致(比如是{abcd}或{abd}),这样才能通过强弱关系来延续。如果一个单元格是{abc},而另外一个单元格却是{abd}的话,这样我们并不能够得到任何合适的结论。特别要引起注意的是,此时的{abc}和{abd}的c和d并非强关系,因为它不是ALS。

Part 3 AUR环

如图所示,这个环稍微有一些复杂,链写法如下:

这些基本的删数,相信我也不用过多去介绍和解释了。还是环的第一个特性:所有弱关系对应可删(拆成链后删除)。

观察这个AUR(我们单独看这个AUR结构),因为之前说到,相邻两个节点的真假性不同,所以r4c7(8)和r3c8(9)自然真假性就不一样了。那么就有这样两种情况:

  • r3c8(9)真,r4c7(8)假;

  • r3c8(9)假,r4c7(8)真。

因为AUR归根结底就是避免致命形式,而内部一定是由产生的数对导致的,我们从这一点来思考就简单一些了。这样一来,我们就分成两个情况作图给大家看。如图所示。

  • 如果是左图这种情况(r3c8(9)真),则r4c7(8)自然应该为假,此时r34c7和r4c78都应该是67显性数对,可以删除的部分用浅红色标注了出来;

  • 如果是右图这种情况(r4c7(8)真),则r3c8(9)自然就应该为假了,此时r3c78和r34c8就会构成67显性数对,可以删除的部分用浅红色标注。

我们就发现了一个地方,是两种情况都可以删掉的:

所以,r1c7 <> 7就是AUR在嵌入环里面的特别删数。这个结构叫做带AUR的环(Grouped Continuous Nice Loop With AUR)。

Part 4 AUR环的另一则示例

这个例子的环的长度只有4,但依然能让我们学习。

如图所示,这个环我们假定从r4c7(1)开始,设该节点为假,则r6c7(8)必须为真,否则同假会导致c7放1和8的位置只有r2c7一个单元格,导致矛盾;接着,r6c7(8)为真时,则必须r2c9(6)为假。否则同真将导致r6c9无法填数。再接着,当r2c9(6)为假后,则必须r4c1(1)为真。因为当r2c9(6)为假时,r2出现6、7的隐性数对,位于r2c13,如果此时r4c1(1)为假的话,则r4c13变为6、7显性数对,此时r24c13均只含有6和7,形成致命形式。所以r4c1(1)必须为真。

链的推导就到这里,那么删数比较好理解的是r4c28(1),不过其它的呢?首先我们来分析r2c7(5)是怎么删除的。实际上,不论r4c7(1)成立也好,r6c7(8)成立也好,由于c7只有三个单元格可以放下1和8,而此时如果r2c7 = 5,就会让一个和1、8不相关的数字占了其中一个单元格,导致剩下两个单元格里无法正常放下1和8(环内的相邻两个节点的真假性相反,即必须一真一假)。所以r2c7 <> 5。

接着我们再来看r6c23(8)和r5c9(8)。我们可以发现的是,这三个候选数处于r6c7(8)节点r2c9(6)节点的所在行列上,我们讨论它们俩即可。当r6c7(8)为真时,显然可以删除这三个候选数;而当r2c9(6)为真时,虽然不明显,但是可以发现,我们用来推矛盾的r6c9派上了用场:此时r6c9只能放下8(双值格的关系,其中的6被设定的r2c9(6)排除了)。所以此时这三个数依然是可以被删除的,所以这三个候选数依旧可以被删掉。

所以这个链的总的删数一共就有这么多。可以发现,链很短,但需要分析很长的时间。

Part 5 待定拓展矩形环

如图所示,这个环的逻辑比较简单,所以就不写文本写法了,不过我们来看看这个待定拓展矩形的删数究竟如何。

我们只提取出待定拓展矩形结构,分情况讨论。依旧是跨结构的两个节点:r5c2(1)和r3c23(9)。我们分别讨论两个情况,如下面的两个图所示。

当r5c2(1)为真时,显然我们可以发现r5c3 = 2、r7c3 = 5;当r3c23(9)为真时,可以发现r5c23为2、5的显性数对,这便使得r46c3两个单元格是不论如何都不能放2和5的,否则它就会使得两种情况都产生矛盾。所以这个例子的额外删数还有r4c3(2)。当然,r46c3(25)是理论上的删数,而题目上并不存在其它的三个候选数,就不用管了。

Part 6 对交空矩形

如图所示,r3c1只有候选数3和4,b2里也同时包含3和4的空矩形结构。

  • 如果假设r3c1 = 3,则由于空矩形的关系,r12c4(3)为真,所以r4c4 = 4;

  • 如果假设r3c1 = 4,由于空矩形的关系,r12c4(4)为真,所以r4c4 = 3。

可以看到,只要我们假设出其中一种情况,则得到r4c4的填数就一定是另外一种情况,所以我们可以得到r3c1和r4c4此时形成跨区数对结构,所以r3c4和r4c1都不能填入3和4。

与此同时,由于空矩形结构的特殊性,在r3和c4上都会产生3和4,一个位于r3c1或r4c4两个单元格上,而另外一个单元格则一定在这个空矩形里。所以r3和c4里的其余位置也都不可以放3和4,删掉它们。

可以看到,这个示例里我们通过空矩形得到了一个跨区数对,而更巧妙的是,它甚至还得到了类似于欠一数对的结果,所以这个技巧叫做对交空矩形(Empty Rectangle Intersection Pair)。

我们不妨再来看一则示例。

如图所示,我们类比上述逻辑假设。如果假设r9c1 = 7,则可以发现b9只有r789c9和r9c78五个单元格可以放入7和9,而它们恰好构成L形状(所谓的“空矩形”区域)。那么,b9里,r9c789里就不能是7了,而r78c9则必须有一个是7。接着,我们就可以得到r1c9 = 9了。

观察一下推理逻辑,我们可以发现,当我们假设r9c1 = 9时,也可以类比上述逻辑,依旧可以得到r1c9 = 7的结果。所以我们完全可以得到r1c9和r9c1是一组关于7和9的跨区数对结构,于是,r1c9和r9c1本对应得到的地方(如r1c1和r9c9)显然就不能再放入多余的7和9了,所以可以删除掉;与此同时,b9的空矩形区域里,必须有一处区块里是填入7的,而另外一组区块里则是填入9的,这恰好又使得r9和c9上产生了关于7和9的数对结构,所以删除掉其余位置的7和9。所以图上的所有红色候选数均可以被删除。

在仔细看过两个示例的你,是否真正理解到它的逻辑了呢?

 

至此,我们学习了很多关于环的使用套路和方式,环的内容就暂时告一段落,接下来将会有一个从另外一个维度拓展链的思想:强制链(Forcing Chain)。


第 40 讲:嵌套结构的环的评论 (共 条)

分享到微博请遵守国家法律