数独玩到一定程度,被一些难题卡住无法突破总是让人感觉非常不爽。在玩这种 9*9 的数独时,自己最熟练的方法是以下这些:
- Naked Single:就是每行/每列/每块”候选数只剩一个”,直接填
- Hidden Single:扫描一个完整的行/列/宫,找某个数字只出现在一格的候选里。注意,这一格本身可能有好几个候选数,但如果 这整行/整列/整宫里,只有它能填这个数,那就必填。
- 最后同样是 Hidden Single ,其实就是反向操作一下,用每一个块去过滤修剪经过它的每行/每列

前面三板斧用完后,就没有什么非常好的办法。例如这个附图中,我标注了所有未填的格子的可能结果。每当遇到这种情况(指没有哪个格子有唯一候选数字,也没法从线-块的交叉验证中缩小可能性的情况),往往就束手无策了。
如何从这堆候选数字里找到突破口,问了一下 AI ,它介绍了几个方法:
- Naked Pair :在同一行/列/宫里,发现两格的候选数完全相同且恰好是两个数(比如都是 {3,8})。这两个数必定分属这两格,所以这行/列/宫里其他所有格都可以删掉 3 和 8。删完之后,往往会触发新的 Naked Single 或 Hidden Single 形成连锁。这个方法其实我会,当是像遇到上图的情况,似乎也没办法突破。
- X-Wing:例如在第 1 列里,9 只可能在:
r3c1、r7c1;第 8 列里,9 只可能在:r3c8、r7c8。这两个列的 9,都被限制在同样的两行:第 3 行和第 7 行。这就是 X-Wing。结论是:第 3 行和第 7 行里的其他格子不能再是 9。具体为什么可以自己推理一下。
最后,没有什么直接可用的技巧了,那就是真正考验推理。也就是构建推理链,找到矛盾点,确认最终的数字。那具体怎么识别从哪个格子开始推理呢?如果只是随便挑一个格子假设,那确实会变成暴力试错,效率很低。所以不要乱选格子。候选链的技巧是:只从有强制关系的地方开始。按这个顺序看:
- 找只有两个候选的格子。例如 {1,8}、{3,5}、{6,9}
- 找某个数字在一行/列/宫里只出现两次的位置。例如某列的 8 只有两个位置
- 从这些“二选一关系”开始推
- 每一步只走“被迫成立”的关系
最重要的是第 2 点。你不用问:这个格子会不会是 8?而是问:如果这里不是 8,哪里会被迫成为 8?这种地方才值得开链。
最后,也不是每个假设都能找到矛盾。很多假设会推不动,或者推很远也没结果。那就应该停止,不要硬算。实战建议:一条链推 5~8 步还没有明显收益,就先放弃。优先找这些位置:
- 双候选格
- 某数字在某行/列/宫里只出现两次
- 刚被 X-Wing、裸对删过候选的区域
- 候选数量很少、互相牵连很密的区域
练习识别这些“二选一关系”,才是从中级进入高级数独的分界线。