← 数独解题技巧 / 基础解法:扫描、唯余与候选数 待审核 1 / 4
基础 · cross-hatching → X-Wing

基础解法:扫描、唯余与候选数

数独只有一条规则:每行、每列、每个 3×3 宫里 1–9 各出现一次。解法的全部差别,在于怎么用这一条规则推理

一个格子同时属于一行、一列、一宫,这三处的其余格子合称它的同伴(peers)。几乎所有技巧都是在利用同伴里已有的数字做推理。本章的六招按「能直接落子 → 只能删候选」排列:前三招给出确定的数字,后三招削减可能性、为下一次落子创造条件。

1 · 扫描排除法:用已有数字否定不可能的格

最基础、也用得最多的一招。反过来用唯一的规则:看准一个数字,凡是同行、同列、同宫已经有它的格子,它就绝不可能再出现。把一个宫里它的「禁区」全划掉,若只剩一格,这一格即可确定。

民间叫法把这招拆成三个名字,实质是同一个动作重复若干次:

  • 否定法——一条扫描线(某行或某列已有该数)划掉宫里一排禁区。
  • 双重否定——两条线一起夹,常是一行一列交叉,把候选逼到一格。
  • 多重否定——三条以上的线接力收口,最后只剩一格。

它们的共同点是不去猜某一格能填什么,而是盯住一个数字,排除它不能去的地方。这与下一节的唯余法正好是一枚硬币的两面:一个从「数字找格子」出发,一个从「格子找数字」出发。

图 1-1 · 盘上只放四个 7,左上宫里 7 的落点被四条扫描线逐格收口。可单步观察每条线划掉哪一排禁区;点任意格会闪出它看得见的行、列、宫。

这一格是 hidden single:不是因为这格只能填 7,而是整个宫里只有这格能放 7。

2 · 唯余法:一格被堵到只剩一个数

盯住一个格子,数它还能填哪些数。一个格子看得见同行、同列、同宫;若这三处加起来已经凑齐 8 个不同数字,这格就只剩最后 1 个可填,直接落子——这是 naked single(显性唯一)。

民间的「行少列补、列少行补、格内缺格外补」说的都是它:

  • 行少列补 / 列少行补——一格的行差一点、列补一点,两边凑够 8 个就只剩一个数。
  • 格内缺格外补——一个宫只差一个数没填,而那个空格的行、列又恰好把别的可能都挡掉,缺口自然落定。
  • 极端情形:某行(或列、宫)只剩一个空格,那它必然是这行缺的那个数——naked single 最直白的样子。

naked single 与 hidden single 是数独里最常出现的两类「能直接落子」的格。绝大多数简单盘从头到尾只靠这两招加扫描就能解完;等盘面卡住、没有现成单数时,才需要先把候选标全。

图 2-1 · 正中一格的候选 1–9 被同行的 1 2 3 4 与同列的 6 7 8 9 逐个划掉,只剩 5。可单步观察行、列各贡献了哪几个数。

3 · 候选数:把可能性写成小字

盘面卡住、再没有现成的单数时,仅凭记忆容易混乱。把每个空格还能填哪些数用小字标进格子,这就是候选数(pencil marks)。标好之后,两类能直接落子的格会自己显现:一格只剩一个候选即 naked single;一个数字在某 house 里只剩一格能放、哪怕那格还挂着别的候选,即 hidden single(隐性唯一)——民间所说「格内唯一 / 行唯一 / 列唯一」那个绕了一道弯的方法。

两类唯一的判据方向相反:一个盯格子,一个盯数字。
类型 怎么认 视角
naked single 显性唯一 只剩 1 个候选 盯格子
hidden single 隐性唯一 在一个 house 里只剩 1 格能放 盯数字

hidden single 与第 1 节的扫描排除法是同一件事——扫描就是在心里完成「这个数在这宫只剩一格」的判断,只不过这里把候选写下来,让它一眼可见。

图 3-1 · 经典盘上中宫的候选全标出后,8 只在一格的候选里出现过。可单步观察它如何被认出;该宫最少的格也有两个候选,故不存在 naked single。

候选标全之后,卡住时就能动用专门「删候选」的技巧。

4 · 数对:两格锁住两数

进阶技巧大多不直接落子,而是删候选,以此打开局面。最常用的是数对:同一 house 里有两个格的候选恰好都是同样的两个数(如都是 {2,5})。虽然还不知道哪格填 2、哪格填 5,但可以确定 2 和 5 必然由这两格占据,于是同 house 其它格再也不能填 2 或 5。

同一族里有三种形态:

  • naked pair(显性数对)——两格的候选恰好是同样两个数,删掉同 house 其它格里这两个数。
  • hidden pair(隐性数对)——反过来:两个数字在某 house 里只出现在同样的两格,那这两格除了这两个数,别的候选都能删。与 hidden single 同一思路,只是两个一组。
  • naked / hidden triple(三数组)——三格锁三数,同理,只是更难一眼看出。
图 4-1 · 正中宫的一对「2 与 5」把同宫其它格的 2 与 5 削去,削完又露出一对新的「4 与 8」。可单步观察候选如何逐层减少。

数对的产出不是答案而是更少的候选。候选一少,别处就可能出现新的 single,再一路推下去——进阶技巧都是这样以「删候选 → 解锁单数」接力的。

5 · 区块摒除:一个数被锁在一条线上

数对靠「两格锁两数」,区块摒除靠「一个数锁在一条线上」。若某个数字在一个宫里能放的格子全挤在同一行(或同一列),那么不管它最后落在哪格,都一定出现在那一行、且在这个宫内——它被锁在「宫 ∩ 行」这一小段区块里。于是同一行里其它宫的格子不能再有这个数,可以直接删掉。

两个方向互为镜像:

  • Pointing(宫摒除行 / 列)——某数在一个宫里只出现在某一行(列),删掉该行(列)其它宫里这个数。
  • Claiming(行 / 列摒除宫)——某数在一个行(列)里只出现在某一个宫内,删掉那个宫其它格里这个数。

本质是两条 house 交叠出一小块区块,某个数被夹在区块里出不去。民间所说「双重否定后两个相同数字抢两排,果断选第三排」的「情迷第三者」,正是这个家族的一员。

图 5-1 · 经典盘左上宫的 7 只能落在第 2 行的两格,于是同行其它宫的 7 被跨宫删去。可单步观察区块如何形成。

数对与区块摒除是从简单盘迈向中等、困难盘的分水岭。

6 · X-Wing:两行两列织成一张网

区块摒除从「一条线」升级到「一个矩形」,就是 X-Wing:某个数字在两行里都恰好只剩两个落点,而且这两行的落点对齐在同样的两列上,四个落点连成一个矩形。这时这个数在那两列里被这两行完全占用,两列其它行的它全部可删。

推理只有一条链:第 1 行的该数只能在两列之一,第 6 行的它也只能在这两列之一。假设第 1 行的它放在左列,那第 6 行的就只能放右列(同列不能再有),反过来对称。两种摆法都把两列各占一个,所以无论如何,这两列的它都归这两行。

图 6-1 · 数字 7 在第 1 行与第 6 行各只剩两个落点,且对齐在第 7、第 9 列上;四角连成矩形后,两列其余行的 7 被删。可单步观察矩形如何成立。

X-Wing 是类技巧(fish)里最小的一条:2 行 × 2 列。日常绝大多数盘面,有基础层的扫描、唯余、候选、数对、区块就足够;X-Wing 起,是留给真正难盘的工具箱。

注 · 本系列棋盘的读法:谜面给定的数字是深色浅底,解出或演示落子的数字是靛蓝。空格里的小字是候选数,高亮表示正在关注,划掉表示被删除。彩色横竖带是扫描线,绿框是本步定下的格。点任意格会闪出它的同伴(行 / 列 / 宫)。

7 · 相关链接