:::

[作品]數獨sudoku解答計算器

5月 13, 2006 48 Comments Edit Copy Download

數獨sudoku,在每一個小九宮格中,分別填上1至9的數字,讓整個大九宮格每一列、每一行的數字都不重複。

這個程式的使用方法是:

  1. 先填入題目
  2. 按下「開始計算」
  3. 等待計算完畢,你可以看到計算的過程喔!
  4. 解答出來囉

不管怎麼說,來玩玩看吧!這邊也提供一個從報紙上抄下來的範例作為題目,按下「範例1」就會自動填入喔!

計算速度  毫秒
驗證次數 
演算法:
  

這個演算法是很基礎的N-QUEEN回溯法,計算方式如下

  1. 從第一格開始判斷,方向為前進
  2. 將該格數字+1並模數10,進行檢查是否符合規則
  3. 檢查通過,跳下一格,方向為前進
  4. 如果數字為0(即10 mod 10),則代表所有可能都計算過,這格沒有可能解,必須退回檢查上一格
  5. 如果該格為題目,則跳下一格(方向為前進)或上一格(方向為後退)

詳細演算法可以自行查詢本網頁的原始碼當中JavaScript的sudoku這個函式。

不過,這個演算法只能說是基礎,還有更好的作法:先列出每一格當中的可能數字,先從擁有最少可能的數字開始進行運算測試,再做下一個,這樣不斷地到所有格子都完成。這跟基礎演算法關鍵性的不同是:進階演算法是利用最可能取得答案的那格開始計算,基礎演算法只是很笨地從第一格開始計算而已。這個程式撰寫時,我也已經留好寫入進階演算法的空間,改天會把它完成吧。

接下來閒聊一下。

數獨sudoku(数獨‧看發音儼然是日文),這玩意兒不知為何在各個場所流行起來了。不僅班上同學特地買了書來玩,連各大報紙每天都有不同的數獨題目。在這個9*9的小空間裡面,數獨的變化可說是變化無窮。

我個人對這種東西就有點不行了,比起花時間向機器般地推敲這個遊戲,我可能比較喜歡玩東方永夜抄訓練手指(汗)。

話說回來,最近演算法上到回溯,可說是越聽越不懂啦。之前的演算法,大部分我都可以直接轉換成程式語言來實作。可是這個回溯的道理雖然簡單,但是要實作起來可就麻煩了。

昨晚吃晚餐的時候,隨意拿起了身邊的報紙來看,又是數獨。之前我就有想過要來寫個簡單的小程式來解數獨了,吃飯的時候跟隆基討論了一下演算法,然後就上機實作當作飯後消化吧。最後是花了三個多小時完成了,之間發生很多無所謂的Bug就不說了,總之完成的那種感覺很爽。

趁月圓的時候,買罐飲料向月亮舉杯,慶賀一下吧XD。


總共48 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. 回覆刪除
  2. 回覆刪除
  3. 回覆刪除
  4. 回覆刪除
  5. 回覆刪除
  6. 回覆刪除
  7. 回覆刪除
  8. 回覆刪除
  9. 回覆刪除
  10. 回覆刪除
  11. 回覆刪除
  12. 回覆刪除
  13. 回覆刪除
  14. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
  15. 回覆刪除
  16. 回覆刪除
  17. 回覆刪除
  18. 回覆刪除
  19. 回覆刪除
  20. 回覆刪除
  21. 回覆刪除
  22. 回覆刪除
  23. 回覆刪除
  24. 回覆刪除
  25. 回覆刪除
  26. 回覆刪除
  27. 回覆刪除
  28. 回覆刪除
  29. 回覆刪除
  30. 回覆刪除
  31. 回覆刪除
  32. 回覆刪除
  33. 回覆刪除
  34. 回覆刪除
  35. 回覆刪除
  36. 回覆刪除
  37. 回覆刪除
    回覆
    1. 回覆刪除