高級

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

預備知識

下一篇