跳到内容

中等数独技巧

学习唯一候选数和隐性唯一数。

中级难在哪里

中级题提供 30–37 个线索数——比简单题少,且排列方式使得纯粹的交叉排除和裸单并非始终奏效。你需要两种额外技巧:隐式唯余(隐藏单数)和候选数锁定(也叫指向数对或行列-宫格削减)。铅笔标记——在每个空格中写下候选数列表——也变得真正必要,而非可选。

好消息是:每道中级数独都有唯一解,且只需逻辑就能得出。不需要任何猜测。如果你感到卡住,本指南中的某种技巧一定能解锁下一步。

隐式唯余:中级核心技巧

隐式唯余(隐藏单数)是指某个格子是某行、某列或某宫格中放置特定数字的唯一合法位置——即使该格子本身仍有多个候选数。这个数字"隐藏"在其他候选数之中。

思维转变:裸单问的是"哪些数字可以填在这个格子里?",隐式唯余问的是"这个数字在这个组里能放在哪里?"两者是同一约束的互补视角。

逐步寻找隐式唯余:

  1. 选择一个数字,比如 7。
  2. 观察某一行。对该行每个空格,判断 7 是否是合法候选数(不出现在该格所在的列或宫格中)。
  3. 如果该行只有一个空格能合法放置 7,就填入。这就是隐式唯余。
  4. 对每一列和每个 3×3 宫格重复操作。
Column 5 — candidates per empty row cell:

  Row 1: {2, 5, 9}
  Row 2: {3, 5}
  Row 3: {1, 5, 7}    ← 7 appears here and nowhere else in this column
  Row 4: {2, 3}
  Row 5: {2, 5, 8}
  Row 6: {3, 5}
  Row 7: {2, 5}
  Row 8: {2, 5}
  Row 9: {2, 5}
  (rows 4 and 6 are given cells, omitted)

→ 7 only appears as a candidate in row 3.
  Place 7 at (row 3, col 5) — hidden single confirmed.
提示填入隐式唯余后,立刻重新扫描受影响的行、列和宫格,寻找新出现的裸单或隐式唯余。一步常常触发一连串推断。

候选数锁定(指向数对与数三元组)

有时,某个 3×3 宫格内某候选数字只能出现在同一行或同一列的格子中。一旦如此,该数字就必须落在那行或那列——在宫格内的某处。因此,你可以将该数字从同行或同列中宫格外的其他空格里排除。

这种技巧叫候选数锁定(根据涉及两个或三个格子,也叫指向数对/数三元组)。

步骤如下:

  1. 选择一个宫格和一个尚未填入其中的数字。
  2. 列出宫格内所有该数字仍为候选数的格子。
  3. 如果所有这些格子都在同一行——或同一列——该数字就被锁定在该宫格的这条线上。
  4. 将该数字从同行或同列中宫格外的其他空格中排除。
Top-right box (rows 1–3, cols 7–9) — scanning for digit 4:

  (1,7): 4 is impossible — row 1 already has 4
  (1,8): 4 is impossible — row 1 already has 4
  (1,9): 4 is impossible — row 1 already has 4
  (2,7): 4 is impossible — row 2 already has 4
  (2,8): 4 is impossible — row 2 already has 4
  (2,9): 4 is impossible — row 2 already has 4
  (3,7): 4 is a candidate ✓
  (3,8): 4 is a candidate ✓
  (3,9): 4 is impossible — col 9 already has 4

All 4-candidates in this box land on row 3.
→ Eliminate 4 from every other empty cell in row 3 outside this box
  (cells in cols 1–6 that still list 4 as a candidate).

候选数锁定不会直接填入数字——它排除候选数,这可能在该行或列的其他地方暴露出隐式唯余或裸单。

行列-宫格削减(反向操作)

行列-宫格削减是候选数锁定的镜像操作。如果某行(或某列)中某候选数字只出现在一个特定的 3×3 宫格内——该行的其他位置都没有——那么这个数字必须落在该宫格内的这一行上。你可以从该宫格中不在目标行的其他格子里排除该数字。

操作方法:

  • 在某行扫描一个数字。记录该行中仍将该数字列为候选数的所有空格。
  • 如果所有这些格子都落在同一个 3×3 宫格内,该数字就被宫格锁定在这一行。
  • 从该宫格中不在这一行的其他格子里排除该数字。
示例第 4 行中,数字 6 只在 (4,7) 和 (4,8) 仍为候选数。这两个格子都在右上宫格内。因此 6 必须出现在该宫格的第 4 行——从 (5,7)、(5,8)、(5,9)、(6,7)、(6,8)、(6,9) 中排除 6。

行列-宫格削减与候选数锁定在逻辑上等价,但从相反方向审视谜题。两者合用,可处理中级谜题中绝大多数的排除操作。

系统性使用铅笔标记

中级难度下,铅笔标记不是可选项——它是正确的工具。以下是一套规范的工作流程:

  1. 先整理棋盘: 在填写候选数之前,先应用所有显而易见的裸单和最后一格步骤,减少后续的干扰。
  2. 为每个空格标记候选数: 逐格根据行、列和宫格排除写下候选数。要写全——漏掉一个候选数会隐藏一步有效推断。
  3. 应用隐式唯余: 对每行、每列和每宫格,检查是否有某个数字只出现在一个格子的候选数列表中。
  4. 应用候选数锁定: 扫描每个宫格,寻找候选数对齐在同一行或同一列的数字。
  5. 每次填入后更新: 从同行、同列、同宫格所有格子的候选数列表中移除已填数字,再从第 3 步重新开始。

保持准确候选数列表的纪律,正是快速、可靠的解题者与"卡在中级"的人之间的分水岭。技巧本身并不难——关键在于坚持。

卡住时怎么办

如果全面扫描后仍无步骤可走,在重新审视方法之前,按顺序尝试以下步骤:

  • 重新检查每行、每列、每宫格的隐式唯余。 第一遍扫描很容易遗漏,尤其是在接近满格的组中。
  • 查看最近填入格子所在宫格的候选数锁定情况。 新的填入可能已将某个数字从分散在两列(行)压缩到了一列(行)内。
  • 检查铅笔标记是否正确。 一个错误或遗漏的候选数可能隐藏了一步合法推断。重新推导几个可疑格子的候选数。
  • 对尚未近期检查的行和列重新应用行列-宫格削减。

中级谜题始终可以不靠猜测解出。如果以上步骤都用尽仍无进展,最可能的原因是早先的铅笔标记出错。使用撤销回退到可能出错之前的状态。

中级解题检查清单

每次填入后,依次过一遍以下清单。大多数中级谜题反复执行这五项检查就能解出:

  • 是否有格子只剩一个候选数?→ 裸单——填入。
  • 是否有数字在某行、某列或某宫格中只能填入一个格子?→ 隐式唯余——填入。
  • 是否有数字在宫格内只集中在同一行或同一列?→ 候选数锁定——在宫格外排除。
  • 是否有数字在某行/列中只集中在一个宫格内?→ 行列-宫格削减——在宫格内排除。
  • 是否有组只剩一个空格?→ 最后一格——立刻填入。

每次填入后按顺序检查这张清单。随着练习,模式识别会越来越快——几周后,你就能不需要刻意过清单,直接发现隐式唯余和候选数锁定。

开始中级模式 →