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