電腦如何解數獨
更新日期:2026-10-05
回溯法
解題程式會在空格中嘗試填入一個符合規則的數字,然後繼續。如果所有數字都無法導向解答,就撤銷先前的選擇,改試另一個。優先選擇可填數字最少的格子,往往能大幅縮短搜尋過程。
資料來源: Wikipedia: Sudoku solving algorithms, Peter Norvig: Solving Every Sudoku Puzzle
精確覆蓋與舞蹈鏈
數獨可以改寫為精確覆蓋問題:選出一組數字填入位置,使每個格子,以及每一列、每一欄與每一宮中的每個數字,都恰好被覆蓋一次。在2000年11月的一篇論文中,唐納德・高德納介紹了舞蹈鏈,這是一種有效率地執行其回溯演算法X的方法;將它應用於數獨的精確覆蓋模型,就能快速找出一道題目的所有解答。
資料來源: Wikipedia: Sudoku solving algorithms, Knuth, Dancing links (arXiv cs/0011047, 2000)
隨機搜尋
有些程式會隨機填滿盤面,再透過模擬退火或遺傳演算法等方法調整數字位置,以減少衝突數量。這些方法已被研究作為替代途徑;成效如何取決於程式與題目。
資料來源: Wikipedia: Sudoku solving algorithms
模擬人類思考的解題程式
提示引擎的任務不同:除了找出答案,還要指出人能跟著操作的下一步。我們應用程式的引擎會依固定順序嘗試人類使用的技巧,從隱性唯一數等最簡單的技巧,到鏈與近鎖定集等最困難的技巧,並採用第一個能導向填入數字的技巧;較難的技巧會先排除候選數。引擎解一道題目時所用的最難技巧,決定了該題在應用程式中的難度等級。
資料來源: 各種數獨難度需要哪些能力