數獨快速隨機出題的算法



C語言寫的程序,2009年 i3 的處理器,出100道題,4.139秒。

算法步驟:
1、初始化數據。
2、向盤面中隨機填入n個數。(這裏的隨機當然不是完全隨機,不然盤面是無解的,n是多少,也要憑經驗,考慮後續算法的時間)
3、求解當前盤面的解的個數。
 3.1、如果解的個數是1,則跳到6。
 3.2、如果解的個數是0,轉到1。
 3.3、如果解的個數大於1,則求出兩個解。
4、比較兩個解中的數字差異,將相異的位置的數,任取一個,填入原始盤面中。
5、再次求解盤面中解的個數。
 5.1、如果解的個數大於1,求出兩個解,跳至4。
 5.2、如果解的個數是1個,至6。
6、從當前盤面有數的位置,依次挖去一個。
 6.1、再次求解盤面中解的個數。
 6.1.1、如果是多個解,則把挖去的數補回,然後跳到6。
 6.1.2、如果是1個解,則跳至6。
7、輸出當前盤面。

爲了減少題目的難度,第6步可省。
100道題,4.139秒是執行了第6步,相當部分題目難度值超過了2000。當然,不執行第6步,出的題目要簡單得多,出題時間也快很多。

 

好吧,貼幾個超高難度的題目:

000860000005000000300000750060000409700130006000200000000000031180300000000702000
000300000206070000050000402000000023000600800831000045000080006009067000700200300
900030006058040000000009502500900003013005000070000000000004070042600000000720100
060000000004020580050090702007000000600100000010080904003000050900300400500240600
000060010006003200250080400030002800800004007000900041008000730000000000907040005
500600000003010000001370080097000130230000094000400700008007240962000000000080000

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章