基础解法:扫描、唯余与候选数
数独只有一条规则:每行、每列、每个 3×3 宫里 1–9 各出现一次。解法的全部差别,在于怎么用这一条规则推理。
一个格子同时属于一行、一列、一宫,这三处的其余格子合称它的同伴(peers)。几乎所有技巧都是在利用同伴里已有的数字做推理。本章的六招按「能直接落子 → 只能删候选」排列:前三招给出确定的数字,后三招削减可能性、为下一次落子创造条件。
1 · 扫描排除法:用已有数字否定不可能的格
最基础、也用得最多的一招。反过来用唯一的规则:看准一个数字,凡是同行、同列、同宫已经有它的格子,它就绝不可能再出现。把一个宫里它的「禁区」全划掉,若只剩一格,这一格即可确定。
民间叫法把这招拆成三个名字,实质是同一个动作重复若干次:
- 否定法——一条扫描线(某行或某列已有该数)划掉宫里一排禁区。
- 双重否定——两条线一起夹,常是一行一列交叉,把候选逼到一格。
- 多重否定——三条以上的线接力收口,最后只剩一格。
它们的共同点是不去猜某一格能填什么,而是盯住一个数字,排除它不能去的地方。这与下一节的唯余法正好是一枚硬币的两面:一个从「数字找格子」出发,一个从「格子找数字」出发。
这一格是 hidden single:不是因为这格只能填 7,而是整个宫里只有这格能放 7。
2 · 唯余法:一格被堵到只剩一个数
盯住一个格子,数它还能填哪些数。一个格子看得见同行、同列、同宫;若这三处加起来已经凑齐 8 个不同数字,这格就只剩最后 1 个可填,直接落子——这是 naked single(显性唯一)。
民间的「行少列补、列少行补、格内缺格外补」说的都是它:
- 行少列补 / 列少行补——一格的行差一点、列补一点,两边凑够 8 个就只剩一个数。
- 格内缺格外补——一个宫只差一个数没填,而那个空格的行、列又恰好把别的可能都挡掉,缺口自然落定。
- 极端情形:某行(或列、宫)只剩一个空格,那它必然是这行缺的那个数——naked single 最直白的样子。
naked single 与 hidden single 是数独里最常出现的两类「能直接落子」的格。绝大多数简单盘从头到尾只靠这两招加扫描就能解完;等盘面卡住、没有现成单数时,才需要先把候选标全。
3 · 候选数:把可能性写成小字
盘面卡住、再没有现成的单数时,仅凭记忆容易混乱。把每个空格还能填哪些数用小字标进格子,这就是候选数(pencil marks)。标好之后,两类能直接落子的格会自己显现:一格只剩一个候选即 naked single;一个数字在某 house 里只剩一格能放、哪怕那格还挂着别的候选,即 hidden single(隐性唯一)——民间所说「格内唯一 / 行唯一 / 列唯一」那个绕了一道弯的方法。
| 类型 | 怎么认 | 视角 |
|---|---|---|
| naked single 显性唯一 | 某格只剩 1 个候选 | 盯格子 |
| hidden single 隐性唯一 | 某数在一个 house 里只剩 1 格能放 | 盯数字 |
hidden single 与第 1 节的扫描排除法是同一件事——扫描就是在心里完成「这个数在这宫只剩一格」的判断,只不过这里把候选写下来,让它一眼可见。
候选标全之后,卡住时就能动用专门「删候选」的技巧。
4 · 数对:两格锁住两数
进阶技巧大多不直接落子,而是删候选,以此打开局面。最常用的是数对:同一 house 里有两个格的候选恰好都是同样的两个数(如都是 {2,5})。虽然还不知道哪格填 2、哪格填 5,但可以确定 2 和 5 必然由这两格占据,于是同 house 其它格再也不能填 2 或 5。
同一族里有三种形态:
- naked pair(显性数对)——两格的候选恰好是同样两个数,删掉同 house 其它格里这两个数。
- hidden pair(隐性数对)——反过来:两个数字在某 house 里只出现在同样的两格,那这两格除了这两个数,别的候选都能删。与 hidden single 同一思路,只是两个一组。
- naked / hidden triple(三数组)——三格锁三数,同理,只是更难一眼看出。
数对的产出不是答案而是更少的候选。候选一少,别处就可能出现新的 single,再一路推下去——进阶技巧都是这样以「删候选 → 解锁单数」接力的。
5 · 区块摒除:一个数被锁在一条线上
数对靠「两格锁两数」,区块摒除靠「一个数锁在一条线上」。若某个数字在一个宫里能放的格子全挤在同一行(或同一列),那么不管它最后落在哪格,都一定出现在那一行、且在这个宫内——它被锁在「宫 ∩ 行」这一小段区块里。于是同一行里其它宫的格子不能再有这个数,可以直接删掉。
两个方向互为镜像:
- Pointing(宫摒除行 / 列)——某数在一个宫里只出现在某一行(列),删掉该行(列)其它宫里这个数。
- Claiming(行 / 列摒除宫)——某数在一个行(列)里只出现在某一个宫内,删掉那个宫其它格里这个数。
本质是两条 house 交叠出一小块区块,某个数被夹在区块里出不去。民间所说「双重否定后两个相同数字抢两排,果断选第三排」的「情迷第三者」,正是这个家族的一员。
数对与区块摒除是从简单盘迈向中等、困难盘的分水岭。
6 · X-Wing:两行两列织成一张网
区块摒除从「一条线」升级到「一个矩形」,就是 X-Wing:某个数字在两行里都恰好只剩两个落点,而且这两行的落点对齐在同样的两列上,四个落点连成一个矩形。这时这个数在那两列里被这两行完全占用,两列其它行的它全部可删。
推理只有一条链:第 1 行的该数只能在两列之一,第 6 行的它也只能在这两列之一。假设第 1 行的它放在左列,那第 6 行的就只能放右列(同列不能再有),反过来对称。两种摆法都把两列各占一个,所以无论如何,这两列的它都归这两行。
X-Wing 是鱼类技巧(fish)里最小的一条:2 行 × 2 列。日常绝大多数盘面,有基础层的扫描、唯余、候选、数对、区块就足够;X-Wing 起,是留给真正难盘的工具箱。
注 · 本系列棋盘的读法:谜面给定的数字是深色浅底,解出或演示落子的数字是靛蓝。空格里的小字是候选数,高亮表示正在关注,划掉表示被删除。彩色横竖带是扫描线,绿框是本步定下的格。点任意格会闪出它的同伴(行 / 列 / 宫)。
7 · 相关链接
- SudokuWiki · Getting Started · sudokuwiki.org——对应第 1–3 节:cross-hatching 与 naked / hidden single 的标准英文说法与练习。
- SudokuWiki · Naked Pairs / Triples · sudokuwiki.org——对应第 4 节:数对与三数组的定义与更多例子。
- SudokuWiki · Intersection Removal · sudokuwiki.org——对应第 5 节:pointing 与 claiming 两个方向的标准讲解。
- 中级技巧:翼、鱼与唯一矩形——第 6 节 X-Wing 的续篇:fish 家族、带鳍鱼与唯一矩形。
- 知乎 · 你玩数独的套路是怎样的? · zhihu.com——本章民间叫法(否定法、行少列补、情迷第三者)的来源,本系列逐条对应到标准术语。