- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
回溯法及其应用.doc
八皇后问题的基本策略及其应用
郭洋洋 王刚 李晴 孙佳
(陕西师范大学计算机科学学院09级计算机科学与技术,西安,710062)
摘要:针对八皇后问题,本文采用回溯法,给出递归与非递归两种算法的设计与分析,并通过实验验证两种算法的性能,得出最佳的算法。
关键词:八皇后;回溯法;递归算法;非递归算法
The Basic Algorithm Strategy For Eight Queens
And Its Application
Guo Yangyang,Wang Gang,Li Qing, Sun Jia
(School of Computer Science ,Shanxi Normal University ,Xi’an ,710062 )
Abstract: Aiming at the problem of Eight Queens,this paper gives Backtracking , and Recursive algorithm and Non-recursive algorithm , and show the design and analysis of the two kinds of algorithms,and through the experiment ,verified the performance of them,getting the most suitable algorithm.
Keywords: Eight Queens; Backtracking; Recursive; Non-Recursive
1 引言
八皇后问题由19 世纪著名的数学家高斯在1850 年提出:在8 ×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法.
回溯算法是尝试搜索算法中最为基本的一种算法,其采用了一种“走不通就调头”的思想,作为其控制结构[1]。回溯法在用来求问题的所有解时,要回溯到根,且根节点的所有可行的子树都已被搜索遍才结束。而回溯法在用来求解问题任一解时,只要搜索到问题的一个解就可以结束。这就是以深度优先的方式系统的搜索问题解的回溯法,它适用于解决一些类似n皇后问题等就切方案问题,也可以解决一些最优化问题。
2 问题描述与模型
八皇后问题:在8 ×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法.
例如图一所示:
图一 8皇后问题
模型建立:不妨设8个皇后为xi ,她们分别在第i行(i=1,2,3,…,8),这样问题的解空间,就是一个8皇后所在列的序号,为n元一维向量(x1,x2,x3,x4,x5,x6,x7,x8),搜索空间是1≤xi≤8(i=1,2,3,…,8),共88个状态。约束条件是8个点(1,x1),(2,x2),(3,x3),(4,x4),(5,x5),(6,x6),(7,x7),(8,x8),不在同一列和同一对角线上。
3 算法设计
下面通过枚举法、非递归算法、递归算法来求解问题。
3.1 枚举法
算法设计:
运用枚举法解决此问题是通过八重循环,按照深度优先思想,从第一个皇后开始搜索,确定第一个位置后,在搜索第二个位置;……;每进一步检查是否满足约束条件,不满足时,用continue回溯到上一个皇后继续寻找;满足约束条件时,开始下一个皇后的搜索;直到找出问题的解。
显然,问题的搜索空间有88个状态。约束条件有有三个[1]:
(Ⅰ)不在同一列的表达式为:xi≠xj
(Ⅱ)不在同一主对角线上的表达式为:xi-i≠xj-j;
(Ⅲ)不在同一负对角线上的表达式为:xi+i≠xj+j;
以上条件和可以合并为一个“不在同一对角线上”的约束条件,表达式为:
abs(xi-xj)≠abs(i-j)(abs()取绝对值)。
算法伪代码如下:
main()
{
for ( a[1]=1; a[1]=8;a[1]=a[1]+1)
for(a[2]=1;a[2]=8;a[2]=a[2]+1)
{if (check(a,2)= =0) continue;
for (a[3]=1;a[3]=8;a[3]=a[3]+1)
{if (check(a,3)= =0) continue;
for (a[4]=1;a[4]=8;a[4]=a[4]+1)
{ if (check(a,4
文档评论(0)