高级
BUG+1:为什么需要解的唯一性这一前提?
检查BUG+1的候选数数量、各行列的条件以及唯一解前提,通过非唯一解反例了解结论为什么会失效。
- 作者
- DailySudoku编辑团队(Object)
- 发布日期
- 2026-09-23
- 更新日期
- 2026-09-23
只找到一个有三个候选数的单元格就够了吗?
BUG+1利用的是唯一解谜题中几乎所有空格都只有两个候选数的特殊状态。但仅凭「一个单元格有三个候选数,其余都是两个」的表面形状还不够。还要检查数字在各行列中的出现次数,最重要的是,需要解的唯一性这一前提。
解的唯一性与每行、每列、每宫中1至9各出现一次的规则,是两回事。满足全部规则的完整盘面也可能有两个或更多。对于自行输入的盘面或删去已知数的盘面,请先确认解的唯一性。
适用条件——先确认前提,再检查单元格数量与各行列的次数
- 当前盘面必须有唯一解,而且之前填入的数字与排除的候选数也都正确。
- 必须只有一个空格恰好有三个候选数,其余所有空格都恰好有两个候选数。
- 假想从有三个候选数的单元格中删去一个数字后,每个剩余候选数字在其出现的所有行、列、宫中,都必须恰好出现两次。已经填入的数字,其候选数出现次数为0。
- 因此,删除之前,该数字在特殊单元格所在的行、列、宫中各出现三次。不能只数完一行或一列中的三次就结束检查。
所有空格都有两个候选数,且各行列中的候选数出现次数也都是两次,这种状态称为BUG。如果这种状态有解,翻转这些选择还会得到另一个解,因此不可能只有一个解。它也可能无解。唯一解盘面不能留下这样的状态,所以要在特殊单元格中填入打破BUG的那个额外候选数。
示例——r7c6的额外候选数是什么?
★ r7c6的候选数是2、5、6。其他空格都只有两个候选数。请数一数数字6的位置。
- 第7行:r7c3、r7c4、r7c6三个位置。
- 第6列:r4c6、r7c6、r9c6三个位置。
- 第8宫:r7c4、r7c6、r9c6三个位置。
去掉r7c6的6后,这三个区域中的6也各剩两个位置,其他所有候选数在各行列中的出现次数也都是0或2。这个盘面已通过回溯法确认只有一个解。因此,r7c6=6。填入2或5就与唯一解前提不相容。确定后,排除同一行、列、宫中的候选数6,再回到基本解法。
不适用的情况与常见误解
- 不知道有多少个解。 只有在生成器保证唯一解,或另行验证过的盘面中,才能使用这个前提。在逻辑求解器中启用BUG+1,本身并不等于检查解的唯一性。
- 有两个或更多单元格各有三个候选数。 这不满足本文BUG+1的条件。
- 候选数数量正确,但各行列中的出现次数不对。 这不是BUG,不能确定额外候选数。
- 漏记了候选数。 错误笔记形成的BUG形状,不能作为依据。
- 以为BUG一定恰好有两个解。 这里需要的只是它不可能有唯一解这一事实。如果存在彼此独立变化的部分,解可能更多。
非唯一解反例——即使条件相同,也不能确定为8
这个反例是从生成器的完整盘面中删去已知数,再用逻辑解法整理后找到的。有三个候选数的单元格只有r9c8,看起来像额外候选数的数字是8。第9行的r9c7·r9c8·r9c9、第8列的r2c8·r5c8·r9c8、第9宫的r9c7·r9c8·r9c9中,8都各出现三次。其他候选数的出现次数也都是0或2,因此,除唯一解以外,BUG+1的候选数条件全部满足。
但解的数量检查结果是至少2个(检查器找到两个就停止)。如果不确认解的唯一性就启用BUG+1,求解器会建议r9c8=8。然而,下面两种完成方式也都符合行、列、宫的规则,因此这个数字并非必须填入。除以下七个单元格外,图中的其他数字都保持不变。
| 空格 | 完成方式A | 完成方式B |
|---|---|---|
| r2c7 | 7 | 8 |
| r2c8 | 8 | 7 |
| r5c8 | 3 | 8 |
| r5c9 | 8 | 3 |
| r9c7 | 8 | 7 |
| r9c8 | 7 | 3 |
| r9c9 | 3 | 8 |
r9c8在A中为7,在B中为3。因此,「r9c8一定是8」的结论是错误的。虽然也存在r9c8为8的解,但选出一个可能的解,与确定一个在所有解中都成立的数字,是不同的。这个反例是多解造成的实际失败,并不是漏记候选数形成的假象。
练习题
★ r8c9的候选数是2、3、4。这个盘面也有唯一解。应该填入哪个候选数?请用坐标写出它各出现三次的三个区域。
查看答案
答案是r8c9=3。第8行的3位于r8c1、r8c7、r8c9,第9列的3位于r2c9、r7c9、r8c9,第9宫的3位于r7c9、r8c7、r8c9。去掉r8c9的3后,包括其他空格在内,所有候选数在其出现的每个区域中都只剩两次。由于唯一解前提,必须避免这个BUG状态,因此要填入额外候选数3。
接着阅读
预备知识是数独候选数怎么记和解数独一定要假设或猜测吗?。接着请阅读AIC入门:交替连接强链与弱链能排除什么?。
示例盘面是通过sudoku-core生成器与逻辑求解器找到的自制盘面,种子、难度和步骤编号已记录在元数据中。定义参考:HoDoKu解的唯一性。