[作品]數獨sudoku解答計算器
[作品]數獨sudoku解答計算器
數獨sudoku,在每一個小九宮格中,分別填上1至9的數字,讓整個大九宮格每一列、每一行的數字都不重複。
這個程式的使用方法是:
- 先填入題目
- 按下「開始計算」
- 等待計算完畢,你可以看到計算的過程喔!
- 解答出來囉
不管怎麼說,來玩玩看吧!這邊也提供一個從報紙上抄下來的範例作為題目,按下「範例1」就會自動填入喔!
這個演算法是很基礎的N-QUEEN回溯法,計算方式如下
- 從第一格開始判斷,方向為前進
- 將該格數字+1並模數10,進行檢查是否符合規則
- 檢查通過,跳下一格,方向為前進
- 如果數字為0(即10 mod 10),則代表所有可能都計算過,這格沒有可能解,必須退回檢查上一格
- 如果該格為題目,則跳下一格(方向為前進)或上一格(方向為後退)
詳細演算法可以自行查詢本網頁的原始碼當中JavaScript的sudoku這個函式。
不過,這個演算法只能說是基礎,還有更好的作法:先列出每一格當中的可能數字,先從擁有最少可能的數字開始進行運算測試,再做下一個,這樣不斷地到所有格子都完成。這跟基礎演算法關鍵性的不同是:進階演算法是利用最可能取得答案的那格開始計算,基礎演算法只是很笨地從第一格開始計算而已。這個程式撰寫時,我也已經留好寫入進階演算法的空間,改天會把它完成吧。
接下來閒聊一下。
數獨sudoku(数獨‧看發音儼然是日文),這玩意兒不知為何在各個場所流行起來了。不僅班上同學特地買了書來玩,連各大報紙每天都有不同的數獨題目。在這個9*9的小空間裡面,數獨的變化可說是變化無窮。
我個人對這種東西就有點不行了,比起花時間向機器般地推敲這個遊戲,我可能比較喜歡玩東方永夜抄訓練手指(汗)。
話說回來,最近演算法上到回溯,可說是越聽越不懂啦。之前的演算法,大部分我都可以直接轉換成程式語言來實作。可是這個回溯的道理雖然簡單,但是要實作起來可就麻煩了。
昨晚吃晚餐的時候,隨意拿起了身邊的報紙來看,又是數獨。之前我就有想過要來寫個簡單的小程式來解數獨了,吃飯的時候跟隆基討論了一下演算法,然後就上機實作當作飯後消化吧。最後是花了三個多小時完成了,之間發生很多無所謂的Bug就不說了,總之完成的那種感覺很爽。
趁月圓的時候,買罐飲料向月亮舉杯,慶賀一下吧XD。
(more...)
Comments