高级

BUG+1:为什么需要解的唯一性这一前提?

检查BUG+1的候选数数量、各行列的条件以及唯一解前提,通过非唯一解反例了解结论为什么会失效。

作者
DailySudoku编辑团队(Object)
发布日期
2026-09-23
更新日期
2026-09-23

只找到一个有三个候选数的单元格就够了吗?

BUG+1利用的是唯一解谜题中几乎所有空格都只有两个候选数的特殊状态。但仅凭「一个单元格有三个候选数,其余都是两个」的表面形状还不够。还要检查数字在各行列中的出现次数,最重要的是,需要解的唯一性这一前提。

解的唯一性与每行、每列、每宫中1至9各出现一次的规则,是两回事。满足全部规则的完整盘面也可能有两个或更多。对于自行输入的盘面或删去已知数的盘面,请先确认解的唯一性。

适用条件——先确认前提,再检查单元格数量与各行列的次数

  1. 当前盘面必须有唯一解,而且之前填入的数字与排除的候选数也都正确。
  2. 必须只有一个空格恰好有三个候选数,其余所有空格都恰好有两个候选数。
  3. 假想从有三个候选数的单元格中删去一个数字后,每个剩余候选数字在其出现的所有行、列、宫中,都必须恰好出现两次。已经填入的数字,其候选数出现次数为0。
  4. 因此,删除之前,该数字在特殊单元格所在的行、列、宫中各出现三次。不能只数完一行或一列中的三次就结束检查。

所有空格都有两个候选数,且各行列中的候选数出现次数也都是两次,这种状态称为BUG。如果这种状态有解,翻转这些选择还会得到另一个解,因此不可能只有一个解。它也可能无解。唯一解盘面不能留下这样的状态,所以要在特殊单元格中填入打破BUG的那个额外候选数。

示例——r7c6的额外候选数是什么?

c1c2c3c4c5c6c7c8c9
r1r2r3r4r5r6r7r8r9
68
7
36
89
5
1
39
4
2
9
1
5
2
4
3
7
8
6
28
4
23
7
6
89
39
5
1
4
2
8
69
3
69
5
1
7
5
6
9
4
1
7
2
3
8
1
3
7
58
2
58
4
6
9
3
8
26
56
7
256
1
9
4
7
9
1
3
8
4
6
2
5
26
5
4
1
9
26
8
7
3
★表示有三个候选数的单元格。其余空格各有两个候选数。请按行或列数一数候选数。

★ 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

c1c2c3c4c5c6c7c8c9
r1r2r3r4r5r6r7r8r9
8
7
6
9
5
1
3
4
2
9
1
5
2
4
3
78
78
6
2
4
3
7
6
8
9
5
1
4
2
8
6
3
9
5
1
7
5
6
9
4
1
7
2
38
38
1
3
7
8
2
5
4
6
9
3
8
2
5
7
6
1
9
4
7
9
1
3
8
4
6
2
5
6
5
4
1
9
2
78
378
38
★ r9c8的候选数是3、7、8。其余六个空格各有两个候选数。这个盘面有两个或更多解,因此不能使用BUG+1。

这个反例是从生成器的完整盘面中删去已知数,再用逻辑解法整理后找到的。有三个候选数的单元格只有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
r2c778
r2c887
r5c838
r5c983
r9c787
r9c873
r9c938

r9c8在A中为7,在B中为3。因此,「r9c8一定是8」的结论是错误的。虽然也存在r9c8为8的解,但选出一个可能的解,与确定一个在所有解中都成立的数字,是不同的。这个反例是多解造成的实际失败,并不是漏记候选数形成的假象。

练习题

c1c2c3c4c5c6c7c8c9
r1r2r3r4r5r6r7r8r9
8
24
39
49
7
6
23
5
1
1
24
39
5
49
8
7
6
23
5
6
7
3
1
2
4
9
8
6
9
5
2
3
1
8
4
7
7
3
1
8
6
4
9
2
5
2
8
4
7
5
9
1
3
6
39
7
2
49
8
5
6
1
34
39
5
6
1
49
7
23
8
234
4
1
8
6
2
3
5
7
9
★表示有三个候选数的单元格。其余空格各有两个候选数。请按行或列数一数候选数。

★ 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解的唯一性。

预备知识

下一篇