中级技巧:翼、鱼与唯一矩形
基础层的六招用尽后,盘面仍可能一步也推不动。本章的四组技巧不再逐格扫描,而是先认出一个图形——三个双值格连成的连环、若干行列织成的网、四角排成的矩形——再由图形整体推出删数。
它们的共同形态是分情况讨论:枚举图形允许的几种摆法,取所有情况都成立的那部分结论。这也是它们比基础层难认的原因:得先看见形状,才能开始推。
1 · XY-Wing:三个双值格连成的连环
只剩两个候选的格称为双值格(bivalue cell)。XY-Wing 用三个双值格:一个枢纽(pivot)候选为 {X,Y},两个翼(pincer)各看得见枢纽、各与它共享一个数,并共有同一个第三数 Z——一个是 {X,Z},一个是 {Y,Z}。
枢纽只有两种可能,逐一推:
- 枢纽 = X → 与它共享 X 的那个翼 {X,Z} 不能再是 X → 只能是 Z。
- 枢纽 = Y → 与它共享 Y 的那个翼 {Y,Z} 不能再是 Y → 只能是 Z。
两条路各逼出一个翼等于 Z,所以「Z 落在某个翼上」是必然的。任何同时被两翼看见的格,都不可能再是 Z。
同族还有 XYZ-Wing(枢纽变成三值 {X,Y,Z})与 W-Wing。XY-Wing 也可以看成一条最短的链:翼₁ — 枢纽 — 翼₂;把这种「或此或彼」的推理拉成任意长,就是下一章的内容。
2 · Swordfish:X-Wing 的 3×3 版
X-Wing 是「2 行 × 2 列」的鱼,放大一号就是 Swordfish——「3 行 × 3 列」。某个数字在三行里的落点全被关进同样的三列(每行两到三个,合起来恰好用满这三列),那么这三行会把这三列的该数字各占一个、用得干干净净,于是这三列里其它行的它统统可删。
| 名字 | 规模 | 逻辑 |
|---|---|---|
| X-Wing | 2 行 × 2 列 | 某数在 2 行只落 2 列 |
| Swordfish | 3 行 × 3 列 | 某数在 3 行只落 3 列 |
| Jellyfish | 4 行 × 4 列 | 某数在 4 行只落 4 列 |
再大就没有必要:五链列及以上都能被与它正交的、更小的鱼完全替换,所以鱼的家族实际到 Jellyfish 为止。Swordfish 的宽松之处在于每行不必都正好两个落点,只要三行的列合起来不超过三列。
3 · 进阶鱼:鳍、退化、宫内、交叉
实战里完美的鱼并不多见,更常碰到「差一点」或「多一点」的鱼。先统一描述一条鱼的四个部件,仍然只盯单个数字 X:
- 定义域(base set)——产生鱼的那组 house(如 X-Wing 的两行),X 被关在这组里。
- 删除域(cover set)——用来覆盖、并执行删数的那组 house(如对应的两列)。
- 鱼身(body)——定义域里 X 的全部落点。
- 鳍(fin)——鱼身之外、定义域内多出来的 X。它让删除域缩小,而非整条 house 地删。
一条规整鱼要求定义域 house 数等于删除域 house 数,且每个 house 内至少两个落点。残缺(incompleted)指鱼缺了某个角,但只要每个 house 仍有两个以上落点,推理不受影响、删除域不变。
带鳍鱼:多出一格会怎样
这是理解所有变异鱼的入口。抓住两种可能,二选一必成立:
- 情况 A——鳍其实是空的:那就是一条干净的 X-Wing,按规整鱼删掉整条删除域里其它行的该数。
- 情况 B——鳍就是该数:那它会清掉自己所在宫里其它格的该数。
要删一个候选,得在两种情况下都被删才安全。两者的交集是「删除域 ∩ 鳍所在宫」——这就是带鳍鱼的核心:鳍把删除域从整条 house 收缩到 house 与鳍宫的交集。看不到鳍的那些格,在情况 B 下保不住,因此全部保留。
鳍必须落在定义域内、且与鱼的某个顶点处在同一个宫;鳍可以不止一枚,但所有鳍必须同处一个宫,这样情况 B 才收敛到单宫。Swordfish、Jellyfish 同样能带鳍,逻辑完全一致。
退化、宫内、交叉与自噬
把带鳍鱼再省一步:若离鳍最近的那条腿不见了,剩下的鱼身已不足以单独构成 X-Wing,这叫退化(degenerated)。退化鱼不能独立成立,但仍能与鳍合起来推理——这种「外鳍 + 退化鱼」的结构英文叫 Sashimi Fish。注意与残缺区分:残缺是缺角但仍能独立推理、删除域不变;退化是缺腿后必须靠鳍。当一枚鳍可以和鱼身的某个位置互换身份、两种读法都能删数时,称为共轭鱼(Siamese Fish)。
定义域也不必全是行或全是列。把规整鱼里的某条行换成一个宫,只要该数仍被关在定义域内,鱼依然成立——这是宫内鱼(Franken Fish)。它引出一种新的鳍:当定义域内部出现自重叠(如一条行与一个宫共用了某些格),重叠处要算两次,既是鱼身又是鳍,称为内鳍(endo fin);它同样把删除域收缩到与内鳍所在宫的交集,交集为空时这条鱼只在理论上成立。
当定义域或删除域里同时含有行和列,就不再是宫内鱼而是交叉鱼(Mutant Fish)。它有一句口诀:行列必交叉,交叉必删宫——前半句是定义,后半句是删法:行与列的交叉点所在的那个宫也并入删除域。
前面的重叠都发生在定义域。当删除域发生重叠、且重叠处恰好压在鱼身的某个落点上时,这个属于鱼身的候选会被自己的结构删掉,称为自噬(cannibalism)。交叉鱼的删除域天然容易在行、列、宫的交点处重叠,因此自噬在交叉鱼里尤其常见。
| 变型 | 英文 | 触发特征 | 删除域如何变 |
|---|---|---|---|
| 残缺 | Incompleted | 鱼缺角,各 house 仍有 2 个以上落点 | 不变,照常删 |
| 外鳍 | Finned | 定义域多出鳍,鳍与某顶点同宫 | 缩为删除域 ∩ 鳍宫 |
| 退化 | Sashimi | 缺腿后必须靠鳍才能推 | 同外鳍,缩为鳍宫交集 |
| 共轭 | Siamese | 鳍可与鱼身某格互换 | 给出两组删除 |
| 宫内 | Franken | 定义域或删除域含「宫」 | 行与宫互换后重算覆盖 |
| 内鳍 | Endo Fin | 定义域内部自重叠,鳍算两次 | 缩为删除域 ∩ 内鳍宫 |
| 交叉 | Mutant | 定义域行列并存 | 交叉点所在宫并入删除域 |
| 自噬 | Cannibalistic | 删除域重叠处压在鱼身上 | 鱼身那个候选被自删 |
4 · Unique Rectangle:用「答案只有一个」反推
本系列其它技巧都只依据规则本身。唯一矩形第一次动用一条元规则:一道合格的数独解必须唯一。设想四个格排成矩形——在两行、两列、恰好横跨两个宫——如果它们的候选最后都变成同样的两个数 {X,Y},那把这四格里的 X、Y 全部对调,会得到另一个同样合法的解。两个解与「解唯一」矛盾,所以这种致命模式(deadly pattern)绝不允许出现;反过来用它,就能删候选。
「跨两宫」是硬条件:四角占两行两列时,行与列的约束在对调后自动满足,唯一可能被破坏的是宫。四角若恰好落在两个宫里(每宫各两角),对调后每个宫里 X、Y 仍各一次,约束不破,两个解才真的成立。
同一条反推随四角多出来的候选形态不同,衍生出一整族类型。术语沿用上文:候选恰好剩 {X,Y} 的角叫 floor,多挂额外候选的角叫 roof。
Type 1 · 单角多余候选
三角是 floor {X,Y},只有一角(roof)多挂额外候选 Z。若 roof 也只剩 {X,Y},四角就成致命模式。
→ roof 删去 X、Y,只能填额外候选。(图 4-1 演示的就是这型)
Type 2 · 两 roof 同一个多余候选
两 floor 是 {X,Y},两 roof 都多挂同一个 Z。要避开致命模式,这两 roof 不能同时不是 Z → 必有一个是 Z。
→ 同时看得见这两 roof 的其它格删 Z。
Type 3 · 两 roof 不同多余候选 → 虚拟数对
两 roof 多挂的是两个不同的额外候选 a、b。其中必有一个为真,于是这两 roof 合起来等价于一个候选为 {a,b} 的虚拟格。 它与同 house 里另一个 {a,b} 双值格凑成 naked pair(扩成三元则是 triple)。
→ 该 house 其它格删 a、b。
Type 4 · roof 一侧是 conjugate 强链
两 roof 共处一个 house,而 Y 在这个 house 里只剩这两格能填(对 Y 构成 conjugate 强链)→ 必有一格是 Y。 那两 roof 就不能同时填 X(否则致命模式回来)。
→ 两 roof 都删 X。
Type 5 · 对角两格多余候选
和 Type 2 同理,只是多挂同一个 Z 的两格落在对角(而非同行 / 列)。这两格仍不能同时不是 Z → 必有一个是 Z。
→ 同时看得见这两个对角格的其它格删 Z。
Type 6 · X 在矩形上构成 X-Wing
四角都已是 {X,Y},而 X 在矩形的两条边上都是 conjugate 强链(即四角对 X 恰好构成一个 X-Wing)。 沿强链推下去,对角一组角填 X 会补全致命模式。
→ 对角两角删 X,定为 Y。
Hidden Unique Rectangle · 隐形唯一矩形
不要求四角显式都是 {X,Y}:三角是双值 {X,Y},第四角还挂着别的候选。 若 Y 沿这角的行与列都对那三角构成 conjugate 强链,则第四角一旦填 X,强链会把另外三角逼回 {X,Y} → 补全致命模式。
→ 第四角删 X。形态藏在强链里,故称「隐形」。
BUG + 1 · 双值泛墓地
不是矩形,但同样靠「解唯一」。若盘面残局里每个空格都恰好剩 2 个候选,只有一格剩 3 个——这种全双值的「BUG 态」会让每个数字在每个 house 里都出现偶数次,意味着候选可两两对调 → 两个解。 要打破它,只能落在那个三值格上:它在某个 house 里出现 3 次(奇数)的那个候选必为真。 → 三值格删去另外两个候选,定为出现奇数次的 Z。
这些类型共享同一个内核:四角不能恰好坍缩成同一对 {X,Y}。区别只在多出来的候选长什么样、靠什么强链锁住——单角多余(Type 1)、双 roof 同候选(Type 2 与对角的 Type 5)、双 roof 异候选凑数对(Type 3)、conjugate 强链(Type 4、6 与 Hidden),以及不依赖矩形但同源的 BUG。实战里 Type 1 到 3 最常见,4 以后偏少但能直接破开僵局。
警示 · 唯一矩形假设了「这道题出得规范、只有一个解」。少数严格的玩家不接受这种元推理,认为应当只用棋盘本身的逻辑;对绝大多数标准谜面它完全成立,但它的依据确实与其它技巧不同——多了「出题人保证唯一解」这条额外信息。
5 · 相关链接
- SudokuWiki · XY-Wing (Y-Wing) · sudokuwiki.org——对应第 1 节:XY-Wing 与 XYZ-Wing 的标准讲解。
- SudokuWiki · Swordfish · sudokuwiki.org——对应第 2 节:Swordfish 与更大的 Jellyfish。
- SudokuWiki · Franken & Mutant Fish · sudokuwiki.org——对应第 3 节:定义域含宫、行列并存的两类变异鱼。
- 独·数之道 · 「鱼」专题原帖 · sudokufans.org.cn——第 3 节的中文长帖来源,从基础鱼一路讲到自噬鳍。
- SudokuWiki · Unique Rectangles · sudokuwiki.org——对应第 4 节:Type 1–6 与 Hidden UR 的逐型图解与例盘。
- 高级技巧:链,以及逻辑的尽头——本章之后的下一档:着色、XY-Chain 与 AIC。