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

第 47 讲:涂色

2021-08-23 07:40 作者:SunnieShine  | 我要投稿

涂色(Coloring)是一种古老的技巧,它利用大量的共轭对来枚举盘面里的填数情况,进而得到一些矛盾来排除一些数字。

由于这个技巧稍微比较暴力一些,但运用了共轭对,所以我们此处作为简单描述,你只需要明白这个技巧的原理即可。这个技巧比较“守旧”,所以看起来有一些暴力,所以你如果不喜欢使用它,大可以跳过本节内容。不过这节内容介绍的技巧在一些软件里依然被使用到,例如Hodoku。

Part 1 单一涂色

1-1 涂色规则#1:色链原则

如图所示,我们发现盘面之中有很多关于1的共轭对。比如r17、c46、b28。我们知道,共轭对指的是两端有且仅有一个为真的两数。那么我们不妨将共轭对分成两种颜色,以标记出两种不同的填数情况,然后再针对这一种已经标好的填数情况,再观察其他共轭对是否有联系。比如图中r1(1)和b2(1)的共轭对就有联系,如果将r1c3(1)涂第一种颜色,那么r1c5(1)就只能涂另外一种颜色,那么b2里,r2c6(1)还是得涂第一种颜色(要保持共轭对两端涂色不同,表示不同填数情况)。

随之涂好一些候选数颜色后,我们发现,r2c6(1)和r3c9(1)涂色不同,而且跨区。这意味着这两个数有且仅有一个是对的。所以,r2c78(1)就不能有填数,否则将会和r2c6(1)和r3c9(1)其中一个重复,违背数独规则;当然,r3c23 <> 1也是一样的思路。

这种结构使用的是最为基础的形式,称为色链(Simple Coloring Type 1),因为它用到共轭对串联起来的效果,就像链一样,把强弱关系串联起来。英文也称为Simple Coloring Trap。

1-2 涂色规则#2:色分原则

涂色法很有趣的地方在于,它还有更奇妙的逻辑。

如图所示,我们找出所有关于8的共轭对。分别图上不同的颜色,并按照刚才色链的方式,颜色要交替涂。随后我们发现,比如c5,r6c5(8)涂第一种颜色,r9c5(8)就得涂第二种颜色。而走另外一个方向,r6上,r6c7(8)也只能涂第二种颜色,r3c7(8)第一种颜色,r1c9(8)第二种颜色,r1c6(8)第一种颜色,c7c6(8)第二种颜色。

这个时候我们发现,r7c6(8)和r9c5(8)是同一种涂色,这意味着同一种填数情况发生在同一个宫内,这明显是违背数独规则的,所以所有同一种涂色下的候选数全部删除。

这个技巧称为色分(Simple Coloring Type 2)。确实很实用,不过有一点暴力就是了。英语里也称为Simple Coloring Wrap,不过我更喜欢叫Simple Coloring Map,因为Map有涉及面较广的含义。

Part 2 复合涂色

复合色链法比起色链法更难一些。

如图所示,将一些共轭对涂色,不过,b3有3个1,没办法形成共轭对,所以我们只能为两边的两种情况分别涂上两套不同的颜色。然后b3内的1就用“不同真”的方式连起来。

此时,图中有四种不同的涂色方式(绿浅、绿深、橙浅、橙深),也就是说图中有四种不同的填数情况,只是,b3(1)不同真,所以意味着“绿浅”和“橙浅”不同真。

  • 如果是绿浅为真,那么由于绿浅和橙浅不同真的关系,橙色的深浅两种颜色(情况)下,只得橙深为真,因此可以删除r5c23(1);

  • 如果是绿深为真,可以删除r5c23(1)。

就绿色的情况而言,至少有一个情况成立,但都可以删除r5c23(1),所以r5c23 <> 1。

这个思路就更加复杂一些了,用到了两种不同的涂色方案,并使用了b3(1)这里用“不同真”的类似于弱关系的东西连接起来了。这种技巧称为复合涂色(Multi Coloring)。

Part 3 异数涂色

前面我们讲到了基本的涂色模式,不过它们仅针对于同数的共轭对而言。接下来我们来看一种运用于异数之间的共轭对(或双值格)的一种涂色技巧。由于涂色涉及同色和异色的删数模式,所以针对于这个技巧而言,就会有四种删数模式,不过同数和同色组合的这种类型是无法删数的,所以不存在,故仅剩下三种类型。

3-1 同数异色类型

如图所示,我们可以找到一大堆双值格和共轭对,并分散构成两种情况。

可以看到,r3c5(3)和r5c5(3)都涂了颜色,但颜色不同,故属于两种不同的情况,而共轭对保证了必须有一种情况成立,所以这两个3里必须有一个数为真,所以显然,r9c5就不可能填3了,因为3属于哪种情况都无法填到这里来;同理,r3c7(3)的删数原理也是一样。

由于这个技巧从数、色、形三个维度对结构进行扩展,所以这个技巧也被叫做立体美杜莎(3D Medusa),所谓的立体就取自三维立体结构之意。

3-2 异数同色类型

如图所示,我们针对于共轭对和双值格进行涂色,随即发现r9c6出现了两个相同涂色的单元格。显然,既然属于同一种情况,那么它们的所有填数真假情况就得是一样的。但是显然,r9c6不可能让5和8都为真,所以只能都为假。所以所有橙色的数字必须全为假,故这些数字全都可以删除。

3-3 异数异色类型

如图所示,我们涂色后发现,在r4c4里,同一个单元格具有两种不同的涂色,这意味着这一个单元格只能是6或者9。所以,这一个单元格不能填入7,把7删除掉即可。

这个逻辑看起来似乎比较好理解,所以我们就不多啰嗦了。不过,这种类型还有一种删数的形式。

如图所示,可以看到r1c2(3)(或者r5c1(3))和r3c1(6)具有不同的涂色。既然两种不同的涂色就表示两种情况里必须成立一个,所以r3c1(3)是不允许填入的,否则它将直接破坏两种情况,导致无法找到合适的填数情况,出现矛盾,所以删除r3c1(3)。

这种结构很类似于不连续环的逻辑,对吧。

至此,涂色的基本内容就介绍完了。

第 47 讲:涂色的评论 (共 条)

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