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/上边有各种数目的皇后的解(已经解出来的)。

文章出处:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/20090303/157264.html)

你可能感兴趣的:(20皇后有多少解)