Skip to content

着色法 (Coloring) ​

着色法是一种单数字解题技巧,有多种复杂度变体。核心原理是,求解者识别目标数字只有两个剩余候选格子的宫,形成强链接(在着色术语中称为共轭对)。每个共轭对中的两个候选数获得相反的颜色。着色完成后,搜索网格以寻找矛盾来实现消除。

当存在两种相反颜色时(例如颜色1和颜色2),要么所有颜色1格子为真且颜色2格子为假,要么反之。两种相反颜色的格子不可能同时为真。对于超过两种颜色的情况,这对每对颜色都成立。

着色技巧本质上是寻找链的方法,但着色通常比在网格中搜索可能的链要容易得多。

简单着色 ​

简单着色只使用两种颜色。从共轭对的一个格子开始,颜色传播直到没有着色格子保留共轭伙伴。然后扫描网格以寻找两种矛盾类型。

颜色陷阱 (Color Trap) ​

一个未着色格子能看到相反颜色的格子。由于那些着色格子中必须有一个为真,共享的候选数从未着色格子中消除。

颜色陷阱示例

关于候选数3的示例:消除格子是r1c9(能看到r1c4和r8c9,它们带有相反颜色)。r3c9和r8c1处也有额外消除。

颜色包裹 (Color Wrap) ​

共享同一颜色的两个格子也共享一个宫。由于同色格子必须全部为真或全部为假,且两者都为真将在一个宫中重复该数字,该颜色必须完全为假。该颜色的所有候选数被消除。

颜色包裹示例

关于候选数8的示例:触发条件是r2c4和r4c4共享同一颜色且都在列4中。消除所有该颜色的格子解决数独(意味着只剩下唯数)。

多重着色 ​

多重着色使用超过一对颜色来处理断开的共轭对区域。存在两种消除类型。

1型(颜色对之间的弱链接) ​

来自不同颜色对的两个着色格子共享一个宫(形成弱链接)。它们不能同时为真,意味着要么对1的相反颜色为真,要么对2的相反颜色为真。任何能看到至少两个相反颜色格子的候选数可以被消除。

多重着色1型示例

关于候选数1的示例:颜色分配是r1c5 = 1a,r1c7 = 1b;r2c9 = 2a,r5c9 = 2b。r1c7(1b)和r2c9(2a)共享宫3。消除格子是r5c23(能看到1a和2b,即相反颜色)。

2型(同一颜色看到另一对的相反颜色) ​

具有给定颜色(比如1b)的格子看到另一对中的相反颜色格子(2b),而另一个1b格子看到该对的另一个颜色(2a)。由于对2的颜色中必须有一个为真,至少一个1b格子必须为假。由于所有同色格子共享状态,所有颜色1b的格子被消除。

多重着色2型示例

关于候选数3的示例:r6c2(1b)看到r6c9(2b);r8c6(1b)看到r2c6(2a)。所有颜色1b的格子失去候选数3。

技术说明 ​

多重着色等同于X链。HoDoKu的实现目前只支持两对颜色,因此不是每个X链步骤都有多重着色等价物。


内容基于 HoDoKu,作者 Bernhard Hobiger,授权于 GNU FDLv1.3。

Content based on HoDoKu by Bernhard Hobiger. Licensed under GNU FDLv1.3.