1. 程式人生 > >數獨問題的一種簡單演算法程式碼實現

數獨問題的一種簡單演算法程式碼實現

五一期間無聊時想起去年考研複試有一道上機題目當時沒作出來,於是一時興起想重新拾起看看是當時太緊張,還是自己能力不足。然後發現這道題目還真稍微有些難度,相當於一道數獨問題(sudoku)的簡化版。自己想來想去也只能想到兩種演算法,一種是拿剩餘元素做全排列測試,一種是回溯法測試。最後只實現了一個全排列測試的演算法。然後又發現自己要寫一個非遞迴的全排列(permutation)也有難度,想了兩天,也沒搞出來,自我BS了一把,感覺這麼基本的演算法都搞不定,還想參加參加ACM/ICPC什麼的,真是不自量力。後來還是挑戰自我思考失敗,只能上網查了一下,發現組合數學(combinatorics)研究了這個東西,給出很多演算法,照那些演算法實現的話相當容易。

 

最後搞出來還是有一點成就感,程式碼貼出來:

 

執行結果如下:

 

把巨集改成9的話,應該可以解決九宮格數獨問題,懶得試,主要是怕不行,沒時間去改……

演算法比較慢,有待改進,可惜大量時間要花在老闆的專案和自己的GRE/TOEFL上,所以沒時間細扣,唉,有悖程式設計師精益求精、鍥而不捨的精神啊,BS一下懶惰的自己……