20皇后有多少解

利用八皇后的C語言實現一文中實現的方法計算各種不同的數目的皇后有多少種解,我最後得到了以下4個結果

8皇后:
耗時:0
結果:92
總共步數:3, 920

10皇后:
耗時:31
結果:724
總共步數:69, 618

12皇后:
耗時:750
結果:14200
總共步數:1, 683, 964

15皇后:
耗時:217828
結果:2, 279, 184
總共步數:337, 699, 759


這裏耗時是以毫秒計算(將所有的打印結果去掉,只計算運行求解的時間,即程序第80行去掉),結果是指解的數目,總共步數是指回溯算法前進後退的步數。
可以看出15皇后耗時已經達到3.5分鐘,而20皇后會有多少種解呢?
我是用這個程序已經運行了3個多小時,沒有得到結果,雖然說內存佔用保持在60K,但是不知道要等到何年何月。我想到一個方法就是因爲這個東西是對成的,我逐個計算從0到9的解,相加之後乘以2應該就是20皇后的解。但是,我還是想等現在這個通解方法計算完成。
另外,我同學寫了一個C++的方法,利用了遞歸,雖然把保存結果的方法去掉了,內存佔用仍然逐步升高,我覺得15皇后都沒法運行出來,而且還得考慮遞歸導致的堆棧溢出問題。在保留結果保存的功能的時候,內存佔用迅速的達到了700M,沒有得到結果,我給關了。
根據http://algo2008.csie.chu.edu.tw/file/f31.pdf(2008年12月24日)的論文可見,上訴已得的結果都是正確的,而20皇后的解數目爲:
39, 029, 188, 884   所以我懷疑我得電腦是否能夠承受這個計算量。當然,正如上邊我所提到的換一個思路計算20皇后,新的算法需要被研究出來以加快或者更好的計算結果。同時論文作者指出他們計算更大的數目皇后的時候都使用了網格計算,因此不是我的一個小本能夠搞定的。簡略的按照倍數來看,15皇后是3.5分鐘,那麼20皇后就應改達到1000多個小時
另外,http://www.research.att.com/~njas/sequences/上邊有各種數目的皇后的解(已經解出來的)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章