困难数独技巧
处理显性数对、隐性数对和区块排除。
困难数独难在哪里
困难题只提供 25–29 个线索数——大约三分之一的棋盘。初期几乎没有单数(唯余和隐性唯一数),宫区块也单独不够用。困难数独需要子集排除:同时对两个或三个格子操作的技巧,在不直接填入数字的情况下缩减候选数。
困难级别的核心技巧有:裸对、裸三元组、隐藏数对和宫区块。这些技巧初看陌生,但很快就能形成模式识别。关键的思维转变:你不总是在找"X 应该填在哪里"——有时你在找"什么结构让我能从某处排除 X"。
裸对:两格锁定两个值
裸对是指同一组(行、列或宫)中,恰好有两个格子都只含有相同的两个候选数,且没有其他候选数。由于这两个格子必须各持这两个值之一(顺序不定),这两个值就不能出现在该组的其他任何地方。
排除逻辑:
- 在同一组中找到两个格子,每个格子恰好含有相同的数对——例如 {3, 7}。
- 这两个值被"预留"给这两个格子。其中一个是 3,另一个是 7(顺序未定)。
- 从该组所有其他格子的候选数列表中移除 3 和 7。
Row 5 candidates (after initial pencil-mark pass):
Col 1: {3, 7} ← pair cell A
Col 2: {1, 5, 9}
Col 3: {3, 7} ← pair cell B — same two values, no others
Col 4: {1, 5}
Col 5: {1, 5, 9}
Col 6: {5, 9}
Col 7: given
Col 8: given
Col 9: {1, 9}
Naked pair {3, 7} in cells (5,1) and (5,3).
→ One of those cells is 3 and the other is 7.
→ Remove 3 and 7 from cols 2, 4, 5, 6, 9 (every other cell in row 5).
Col 2 becomes {1, 5, 9} (unchanged — no 3 or 7 to remove)
Col 9 becomes {1, 9} (unchanged — no 3 or 7 to remove)
No eliminations happen here, but in other rows the same pair often frees up moves.
裸对产生的排除往往在同一组或相邻组中暴露出唯余或隐性唯一数,引发连锁推断。应用技巧后,始终重新扫描受影响的行、列和宫。
裸三元组
裸三元组是裸对的延伸:如果同一组中三个格子之间总共只有三个不同的候选数,这三个值就被锁定在这三个格子中。从该组所有其他格子中排除这三个值。
这三个格子不需要各自都含有全部三个值——只需确保它们不包含三个值之外的其他数字。常见形式(用值 {A, B, C} 表示):
- {A,B}、{B,C}、{A,C} ——每两个值各一对
- {A,B,C}、{A,B}、{B,C} ——一个完整三元组加两个子集
- {A,B,C}、{A,B,C}、{A,B,C} ——三个完全相同
裸三元组比裸对少见,但在困难题中仍会规律性地出现。系统性地扫描——先看宫,再看行和列——是其他技巧受阻时的可靠策略。
隐藏数对:裸对的镜像
隐藏数对是裸对的对应物。不是寻找只有两个候选数的两个格子,而是寻找在某组中恰好只出现在两个格子里的两个数字——即使这两个格子有很多其他候选数。
如果数字 A 和 B 在某组中只出现在格子 X 和格子 Y 的候选数列表中,那么 X 必须是 A 或 B 其中之一,Y 必须是另一个。格子 X 和 Y 中的所有其他候选数都可以安全移除——这个数对"隐藏"在那些多余候选数之中。
Box (rows 4–6, cols 4–6) — scanning for digits 2 and 8:
(4,4): {1, 2, 5, 8} ← contains both 2 and 8
(4,5): {1, 5}
(4,6): {2, 5, 8} ← contains both 2 and 8
(5,4): {1, 5}
(5,5): {1, 5} ← no 2 or 8
(5,6): {1, 5}
(6,4): {1, 5}
(6,5): {1, 5}
(6,6): {1, 5}
Digits 2 and 8 appear as candidates in exactly two cells: (4,4) and (4,6).
→ Hidden pair confirmed: (4,4) must be 2 or 8; (4,6) must be 2 or 8.
→ Remove all other candidates from those two cells:
(4,4) becomes {2, 8}
(4,6) becomes {2, 8}
→ Now check: (4,5) = {1, 5} — is either a naked single? Not yet.
But the box now has fewer candidates; re-scan for new singles.
排除之后,隐藏数对所在格子往往会变成唯余,或形成新的裸对,进一步触发连锁推断。隐藏数对经常是解锁困难题的突破性一步。
宫区块与数三元组
中等数独中的宫区块(宫区块)在困难题中依然重要。困难题中候选数列表更密,宫区块不那么显眼,但逻辑完全相同:
- 对每个宫,列出每个尚未填入的数字可以出现的位置。
- 如果所有位置都对齐在同一行或同一列,就从宫外的该行或列中排除该数字。
在困难难度下,宫区块往往在裸对或隐藏数对排除之后才显现——候选数列表被精简后,之前无法看出的行列对齐才变得可见。每次子集排除后,立刻重新运行中等检查清单至关重要。
困难题中的行列区块
行列区块(某行或列中的数字候选数完全集中在一个宫内)在困难题中依然适用。裸对排除之后,候选数列表更薄,之前分散在两个宫中的数字可能现在只集中在一个宫内——从而产生新的排除机会。
养成习惯:每次子集排除之后,对所有行、列和宫重新执行宫区块和行列区块。困难题是技巧的链式反应,每步都让下一步变得可见。
决策树:何时使用哪种技巧
卡住时使用此决策树,从上到下依次尝试,任何一步成功后从头重新开始:
- 是否有唯余?→ 填入,然后重新开始。
- 是否有隐性唯一数?→ 填入,然后重新开始。
- 是否有宫区块或行列区块?→ 排除,然后重新开始。
- 是否有同组内的裸对?→ 排除,然后重新开始。
- 是否有隐藏数对?→ 排除,然后重新开始。
- 是否有裸三元组?→ 排除,然后重新开始。
- 仍然卡住?→ 检查铅笔标记是否准确完整。重新推导任何可疑格子的候选数。
这个循环——填入、排除、重复——能解决绝大多数困难数独。错误几乎都源于候选数列表不准确,而非缺少某种技巧。