Platon Sudoku · 數獨學習
強制網 (Forcing Net) · 分步講解
強制網的候選蘊含可分叉再匯合,通過矛盾或窮盡分支的共同結果得到結論。 排除被否定的候選,或執行全部窮盡分支共有的結果。
本課程改編自 Platon Sudoku App 的教學內容。你可以在這裡讀完完整實例,再到應用程式中繼續學習和練習。
在 Google Play 查看 ↗辨認模式
強制網的候選蘊含可分叉再匯合,通過矛盾或窮盡分支的共同結果得到結論。
如何尋找
追蹤每個前提和每條分支,核實連接,再比較矛盾或共同終點。
可以得出甚麼
排除被否定的候選,或執行全部窮盡分支共有的結果。
別看錯了
不能跳過分支,也不能把單一路徑的結果當成所有分支共有。
分步講解 · 矛盾
本例從已儲存的中途盤面開始,候選數包含先前邏輯排除的結果,並非剛剛自動產生的筆記。
藍色:推理依據。綠色:結論。劃線數字:排除的候選數。R1C1 表示第1列第1欄。
步驟 1 · 觀察位置
R1C3=7 只有成立與不成立兩種狀態。依賴圖檢查“R1C3=7 成立”;若它導致矛盾,就排除該狀態並強制“R1C3=7 不成立”,因此兩種可能已完整覆蓋。這是 Forcing Net,而不是 Forcing Chain,因為已驗證的依賴圖發生扇出或匯合,不再是一條線性蘊含路徑。本驗證分支共有 49 個已驗證節點。
R1C3=7 只有成立與不成立兩種狀態。依賴圖檢查“R1C3=7 成立”;若它導致矛盾,就排除該狀態並強制“R1C3=7 不成立”,因此兩種可能已完整覆蓋。這是 Forcing Net,而不是 Forcing Chain,因為已驗證的依賴圖發生扇出或匯合,不再是一條線性蘊含路徑。本驗證分支共有 49 個已驗證節點。步驟 2 · 推理過程
分支 1:假設 R1C3=7 成立。
分支 1:假設 R1C3=7 成立。步驟 3 · 推理過程
R1C3=7 已經成立,排除 {R1C3=2, R1C3=9, R1C8=7, R2C1=7, R3C1=7, R8C3=7}。
R1C3=7 已經成立,排除 {R1C3=2, R1C3=9, R1C8=7, R2C1=7, R3C1=7, R8C3=7}。步驟 4 · 推理過程
經過前面的排除,R8C3只剩 R8C3=3 一個選項。在當前假設下,它被迫成立。
經過前面的排除,R8C3只剩 R8C3=3 一個選項。在當前假設下,它被迫成立。步驟 5 · 推理過程
R8C3=3 已經成立,排除 R7C3=3。
R8C3=3 已經成立,排除 R7C3=3。步驟 6 · 推理過程
經過前面的排除,第 7 行只剩 R7C4=3 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 7 行只剩 R7C4=3 一個選項。在當前假設下,它被迫成立。步驟 7 · 推理過程
經過前面的排除,第 8 行只剩 R8C2=7 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 8 行只剩 R8C2=7 一個選項。在當前假設下,它被迫成立。步驟 8 · 推理過程
R8C2=7 已經成立,排除 R8C2=8。
R8C2=7 已經成立,排除 R8C2=8。步驟 9 · 推理過程
經過前面的排除,第 8 行只剩 R8C8=8 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 8 行只剩 R8C8=8 一個選項。在當前假設下,它被迫成立。步驟 10 · 推理過程
R8C8=8 已經成立,排除 R8C8=4。
R8C8=8 已經成立,排除 R8C8=4。步驟 11 · 推理過程
經過前面的排除,第 1 列只剩 R6C1=7 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 1 列只剩 R6C1=7 一個選項。在當前假設下,它被迫成立。步驟 12 · 推理過程
R6C1=7 已經成立,排除 R6C1=5。
R6C1=7 已經成立,排除 R6C1=5。步驟 13 · 推理過程
經過前面的排除,第 8 列只剩 R3C8=4 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 8 列只剩 R3C8=4 一個選項。在當前假設下,它被迫成立。步驟 14 · 推理過程
R3C8=4 已經成立,排除 {R3C8=1, R3C8=6}。
R3C8=4 已經成立,排除 {R3C8=1, R3C8=6}。步驟 15 · 推理過程
經過前面的排除,第 1 宮只剩 R3C1=2 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 1 宮只剩 R3C1=2 一個選項。在當前假設下,它被迫成立。步驟 16 · 推理過程
R3C1=2 已經成立,排除 R3C1=5。
R3C1=2 已經成立,排除 R3C1=5。步驟 17 · 推理過程
經過前面的排除,第 9 宮只剩 R9C7=4 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 9 宮只剩 R9C7=4 一個選項。在當前假設下,它被迫成立。步驟 18 · 推理過程
R9C7=4 已經成立,排除 R9C7=9。
R9C7=4 已經成立,排除 R9C7=9。步驟 19 · 推理過程
經過前面的排除,第 9 宮只剩 R7C9=9 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 9 宮只剩 R7C9=9 一個選項。在當前假設下,它被迫成立。步驟 20 · 推理過程
R3C8=4 已經成立,排除 R2C7=4。
R3C8=4 已經成立,排除 R2C7=4。步驟 21 · 推理過程
R6C1=7 已經成立,排除 R6C7=7。
R6C1=7 已經成立,排除 R6C7=7。步驟 22 · 推理過程
經過前面的排除,R6C7只剩 R6C7=6 一個選項。在當前假設下,它被迫成立。
經過前面的排除,R6C7只剩 R6C7=6 一個選項。在當前假設下,它被迫成立。步驟 23 · 推理過程
R6C7=6 已經成立,排除 R3C7=6。
R6C7=6 已經成立,排除 R3C7=6。步驟 24 · 推理過程
R7C4=3 已經成立,排除 R2C4=3。
R7C4=3 已經成立,排除 R2C4=3。步驟 25 · 推理過程
R7C9=9 已經成立,排除 {R1C9=9, R7C3=9}。
R7C9=9 已經成立,排除 {R1C9=9, R7C3=9}。步驟 26 · 推理過程
R8C8=8 已經成立,排除 R1C8=8。
R8C8=8 已經成立,排除 R1C8=8。步驟 27 · 推理過程
經過前面的排除,第 3 行只剩 R3C9=6 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 3 行只剩 R3C9=6 一個選項。在當前假設下,它被迫成立。步驟 28 · 推理過程
R3C9=6 已經成立,排除 R3C9=1。
R3C9=6 已經成立,排除 R3C9=1。步驟 29 · 推理過程
經過前面的排除,第 9 行只剩 R9C1=9 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 9 行只剩 R9C1=9 一個選項。在當前假設下,它被迫成立。步驟 30 · 推理過程
R9C1=9 已經成立,排除 R9C1=5。
R9C1=9 已經成立,排除 R9C1=5。步驟 31 · 推理過程
經過前面的排除,第 1 列只剩 R2C1=5 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 1 列只剩 R2C1=5 一個選項。在當前假設下,它被迫成立。步驟 32 · 推理過程
經過前面的排除,第 3 列只剩 R2C3=9 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 3 列只剩 R2C3=9 一個選項。在當前假設下,它被迫成立。步驟 33 · 推理過程
經過前面的排除,第 3 宮只剩 R2C9=1 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 3 宮只剩 R2C9=1 一個選項。在當前假設下,它被迫成立。步驟 34 · 推理過程
經過前面的排除,R1C8只剩 R1C8=5 一個選項。在當前假設下,它被迫成立。
經過前面的排除,R1C8只剩 R1C8=5 一個選項。在當前假設下,它被迫成立。步驟 35 · 推理過程
R1C8=5 已經成立,排除 R1C9=5。
R1C8=5 已經成立,排除 R1C9=5。步驟 36 · 推理過程
經過前面的排除,R1C9只剩 R1C9=8 一個選項。在當前假設下,它被迫成立。
經過前面的排除,R1C9只剩 R1C9=8 一個選項。在當前假設下,它被迫成立。步驟 37 · 推理過程
R1C9=8 已經成立,排除 R2C7=8。
R1C9=8 已經成立,排除 R2C7=8。步驟 38 · 推理過程
R2C1=5 已經成立,排除 R2C4=5。
R2C1=5 已經成立,排除 R2C4=5。步驟 39 · 推理過程
R2C3=9 已經成立,排除 R2C7=9。
R2C3=9 已經成立,排除 R2C7=9。步驟 40 · 推理過程
經過前面的排除,R2C7只剩 R2C7=7 一個選項。在當前假設下,它被迫成立。
經過前面的排除,R2C7只剩 R2C7=7 一個選項。在當前假設下,它被迫成立。步驟 41 · 推理過程
R2C7=7 已經成立,排除 R2C4=7。
R2C7=7 已經成立,排除 R2C4=7。步驟 42 · 推理過程
R2C9=1 已經成立,排除 R2C4=1。
R2C9=1 已經成立,排除 R2C4=1。步驟 43 · 推理過程
這個假設讓R2C4沒有可用的數字或落點:{R2C4=1, R2C4=3, R2C4=5, R2C4=7}。每格、每個區域中缺少的數字都必須有選項,因此假設不可能成立。
這個假設讓R2C4沒有可用的數字或落點:{R2C4=1, R2C4=3, R2C4=5, R2C4=7}。每格、每個區域中缺少的數字都必須有選項,因此假設不可能成立。步驟 44 · 撤回上一種矩形填法
撤回這個假設和由它產生的結果。恢復原候選快照,再檢查下一種可能。
撤回這個假設和由它產生的結果。恢復原候選快照,再檢查下一種可能。步驟 45 · 結論
因為不可能在這個結構中成立,所以可以刪除R1C3=7。
因為不可能在這個結構中成立,所以可以刪除R1C3=7。可以得出甚麼
因為不可能在這個結構中成立,所以可以刪除R1C3=7。
強制網 (Forcing Net) · 排除被否定的候選,或執行全部窮盡分支共有的結果。分步講解 · 共同結果
本例從已儲存的中途盤面開始,候選數包含先前邏輯排除的結果,並非剛剛自動產生的筆記。
藍色:推理依據。綠色:結論。劃線數字:排除的候選數。R1C1 表示第1列第1欄。
步驟 1 · 觀察位置
根狀態全集 R7C5=2, R7C5=4, R7C5=9 恰好覆蓋R7C5中的全部可行起點,因此這些根分支已經窮盡全部可能。 這是 Forcing Net,而不是 Forcing Chain,因為已驗證的依賴圖發生扇出或匯合,不再是一條線性蘊含路徑。依賴圖共有 3 個根分支、58 個已驗證節點;要檢查的共同結果是“R3C6=2 成立”。
根狀態全集 R7C5=2, R7C5=4, R7C5=9 恰好覆蓋R7C5中的全部可行起點,因此這些根分支已經窮盡全部可能。 這是 Forcing Net,而不是 Forcing Chain,因為已驗證的依賴圖發生扇出或匯合,不再是一條線性蘊含路徑。依賴圖共有 3 個根分支、58 個已驗證節點;要檢查的共同結果是“R3C6=2 成立”。步驟 2 · 推理過程
分支 1:假設 R7C5=2 成立。
分支 1:假設 R7C5=2 成立。步驟 3 · 推理過程
R7C5=2 已經成立,排除 R3C5=2。
R7C5=2 已經成立,排除 R3C5=2。步驟 4 · 推理過程
經過前面的排除,第 3 行只剩 R3C6=2 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 3 行只剩 R3C6=2 一個選項。在當前假設下,它被迫成立。步驟 5 · 撤回上一種矩形填法
撤回這個假設和由它產生的結果。恢復原候選快照,再檢查下一種可能。
撤回這個假設和由它產生的結果。恢復原候選快照,再檢查下一種可能。步驟 6 · 推理過程
分支 2:假設 R7C5=4 成立。
分支 2:假設 R7C5=4 成立。步驟 7 · 推理過程
R7C5=4 已經成立,排除 R8C5=4。
R7C5=4 已經成立,排除 R8C5=4。步驟 8 · 推理過程
經過前面的排除,R8C5只剩 R8C5=2 一個選項。在當前假設下,它被迫成立。
經過前面的排除,R8C5只剩 R8C5=2 一個選項。在當前假設下,它被迫成立。步驟 9 · 推理過程
R8C5=2 已經成立,排除 R3C5=2。
R8C5=2 已經成立,排除 R3C5=2。步驟 10 · 推理過程
經過前面的排除,第 3 行只剩 R3C6=2 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 3 行只剩 R3C6=2 一個選項。在當前假設下,它被迫成立。步驟 11 · 撤回上一種矩形填法
撤回這個假設和由它產生的結果。恢復原候選快照,再檢查下一種可能。
撤回這個假設和由它產生的結果。恢復原候選快照,再檢查下一種可能。步驟 12 · 推理過程
分支 3:假設 R7C5=9 成立。
分支 3:假設 R7C5=9 成立。步驟 13 · 推理過程
R7C5=9 已經成立,排除 {R7C7=9, R7C8=9, R7C9=9}。
R7C5=9 已經成立,排除 {R7C7=9, R7C8=9, R7C9=9}。步驟 14 · 推理過程
經過前面的排除,R7C8只剩 R7C8=7 一個選項。在當前假設下,它被迫成立。
經過前面的排除,R7C8只剩 R7C8=7 一個選項。在當前假設下,它被迫成立。步驟 15 · 推理過程
R7C8=7 已經成立,排除 {R7C9=7, R9C7=7, R9C8=7}。
R7C8=7 已經成立,排除 {R7C9=7, R9C7=7, R9C8=7}。步驟 16 · 推理過程
經過前面的排除,R7C9只剩 R7C9=8 一個選項。在當前假設下,它被迫成立。
經過前面的排除,R7C9只剩 R7C9=8 一個選項。在當前假設下,它被迫成立。步驟 17 · 推理過程
R7C9=8 已經成立,排除 {R7C7=8, R8C7=8, R9C7=8}。
R7C9=8 已經成立,排除 {R7C7=8, R8C7=8, R9C7=8}。步驟 18 · 推理過程
經過前面的排除,第 9 行只剩 R9C1=7 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 9 行只剩 R9C1=7 一個選項。在當前假設下,它被迫成立。步驟 19 · 推理過程
經過前面的排除,第 7 列只剩 R4C7=8 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 7 列只剩 R4C7=8 一個選項。在當前假設下,它被迫成立。步驟 20 · 推理過程
R4C7=8 已經成立,排除 R4C7=5。
R4C7=8 已經成立,排除 R4C7=5。步驟 21 · 推理過程
經過前面的排除,第 9 列只剩 R4C9=7 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 9 列只剩 R4C9=7 一個選項。在當前假設下,它被迫成立。步驟 22 · 推理過程
R4C9=7 已經成立,排除 R4C9=9。
R4C9=7 已經成立,排除 R4C9=9。步驟 23 · 推理過程
經過前面的排除,第 9 列只剩 R6C9=9 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 9 列只剩 R6C9=9 一個選項。在當前假設下,它被迫成立。步驟 24 · 推理過程
R6C9=9 已經成立,排除 R6C9=1。
R6C9=9 已經成立,排除 R6C9=1。步驟 25 · 推理過程
經過前面的排除,第 6 宮只剩 R5C7=1 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 6 宮只剩 R5C7=1 一個選項。在當前假設下,它被迫成立。步驟 26 · 推理過程
R5C7=1 已經成立,排除 {R5C7=5, R5C7=7}。
R5C7=1 已經成立,排除 {R5C7=5, R5C7=7}。步驟 27 · 推理過程
經過前面的排除,第 6 宮只剩 R4C8=5 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 6 宮只剩 R4C8=5 一個選項。在當前假設下,它被迫成立。步驟 28 · 推理過程
R4C8=5 已經成立,排除 {R4C5=5, R8C8=5}。
R4C8=5 已經成立,排除 {R4C5=5, R8C8=5}。步驟 29 · 推理過程
R5C7=1 已經成立,排除 {R2C7=1, R5C1=1}。
R5C7=1 已經成立,排除 {R2C7=1, R5C1=1}。步驟 30 · 推理過程
R9C1=7 已經成立,排除 R5C1=7。
R9C1=7 已經成立,排除 R5C1=7。步驟 31 · 推理過程
經過前面的排除,第 5 行只剩 R5C2=7 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 5 行只剩 R5C2=7 一個選項。在當前假設下,它被迫成立。步驟 32 · 推理過程
R5C2=7 已經成立,排除 R5C2=3。
R5C2=7 已經成立,排除 R5C2=3。步驟 33 · 推理過程
經過前面的排除,第 8 行只剩 R8C7=5 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 8 行只剩 R8C7=5 一個選項。在當前假設下,它被迫成立。步驟 34 · 推理過程
R8C7=5 已經成立,排除 {R8C7=2, R8C7=6}。
R8C7=5 已經成立,排除 {R8C7=2, R8C7=6}。步驟 35 · 推理過程
經過前面的排除,第 1 列只剩 R1C1=1 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 1 列只剩 R1C1=1 一個選項。在當前假設下,它被迫成立。步驟 36 · 推理過程
經過前面的排除,第 7 列只剩 R7C7=6 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 7 列只剩 R7C7=6 一個選項。在當前假設下,它被迫成立。步驟 37 · 推理過程
R7C7=6 已經成立,排除 R7C7=2。
R7C7=6 已經成立,排除 R7C7=2。步驟 38 · 推理過程
經過前面的排除,第 9 宮只剩 R9C7=2 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 9 宮只剩 R9C7=2 一個選項。在當前假設下,它被迫成立。步驟 39 · 推理過程
R9C7=2 已經成立,排除 R9C7=9。
R9C7=2 已經成立,排除 R9C7=9。步驟 40 · 推理過程
經過前面的排除,第 9 宮只剩 R9C8=9 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 9 宮只剩 R9C8=9 一個選項。在當前假設下,它被迫成立。步驟 41 · 推理過程
R9C8=9 已經成立,排除 R9C8=3。
R9C8=9 已經成立,排除 R9C8=3。步驟 42 · 推理過程
R1C1=1 已經成立,排除 R2C3=1。
R1C1=1 已經成立,排除 R2C3=1。步驟 43 · 推理過程
經過前面的排除,第 2 行只剩 R2C5=1 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 2 行只剩 R2C5=1 一個選項。在當前假設下,它被迫成立。步驟 44 · 推理過程
R2C5=1 已經成立,排除 R2C5=5。
R2C5=1 已經成立,排除 R2C5=5。步驟 45 · 推理過程
經過前面的排除,第 9 行只剩 R9C3=3 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 9 行只剩 R9C3=3 一個選項。在當前假設下,它被迫成立。步驟 46 · 推理過程
經過前面的排除,第 5 列只剩 R5C5=5 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 5 列只剩 R5C5=5 一個選項。在當前假設下,它被迫成立。步驟 47 · 推理過程
R5C5=5 已經成立,排除 R5C5=3。
R5C5=5 已經成立,排除 R5C5=3。步驟 48 · 推理過程
R9C3=3 已經成立,排除 R5C3=3。
R9C3=3 已經成立,排除 R5C3=3。步驟 49 · 推理過程
經過前面的排除,第 5 行只剩 R5C6=3 一個選項。在當前假設下,它被迫成立。
經過前面的排除,第 5 行只剩 R5C6=3 一個選項。在當前假設下,它被迫成立。步驟 50 · 推理過程
R5C6=3 已經成立,排除 R3C6=3。
R5C6=3 已經成立,排除 R3C6=3。步驟 51 · 推理過程
經過前面的排除,R3C6只剩 R3C6=2 一個選項。在當前假設下,它被迫成立。
經過前面的排除,R3C6只剩 R3C6=2 一個選項。在當前假設下,它被迫成立。步驟 52 · 推理過程
所有可能分支都得到同一事實:R3C6=2 成立。撤回全部假設後,這一事實仍然必然成立。
所有可能分支都得到同一事實:R3C6=2 成立。撤回全部假設後,這一事實仍然必然成立。步驟 53 · 結論
根據這個結構,R3C6=2必須成立。
根據這個結構,R3C6=2必須成立。可以得出甚麼
根據這個結構,R3C6=2必須成立。
強制網 (Forcing Net) · 排除被否定的候選,或執行全部窮盡分支共有的結果。