算法设计与分析实验报告—八皇后问题

算法设计与分析实验报告—八皇后问题

ID:11159191

大小:59.37 KB

页数:5页

时间:2018-07-10

算法设计与分析实验报告—八皇后问题_第1页
算法设计与分析实验报告—八皇后问题_第2页
算法设计与分析实验报告—八皇后问题_第3页
算法设计与分析实验报告—八皇后问题_第4页
算法设计与分析实验报告—八皇后问题_第5页
资源描述:

《算法设计与分析实验报告—八皇后问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、算法设计与分析实验报告—八皇后问题-姓名:崔明鑫学号:08208012班级:软件83【问题描述】在国际象棋盘上放八个皇后,要求任一皇后吃不到别人,也不受其他皇后的攻击,求出问题的所有解。【问题分析&算法设计】用8元组x[1:n]表示8后问题。其中x[i]表示皇后i放在棋盘的第i行的第x[i]列。由于不允许将2个皇后放在一列,所以解向量中的x[i]互不相同。2个皇后不能放在同一斜线上是问题的隐约束。故若2个皇后放置的位置分别是(i,j)和(k,l),且i–j=k–l或i+j=k+l,则说明这2个皇后处于同一

2、斜线上。这两个方程分别等价于i–k=j–l和i–k=l–j。由此可知,只要

3、i-k

4、=

5、j-l

6、成立,就表明2个皇后位于同一条斜线上。问题的隐约束化成了显约束。用回溯法解决8皇后问题时,用完全8叉树表示解空间。【算法实现】#include"stdio.h"#include"math.h"#include"iostream.h"#defineN8/*定义棋盘大小*/staticintsum;/*当前已找到解的个数*/staticintx[N];/*记录皇后的位置,x[i]表示皇后i放在棋盘的第i行的第x[i

7、]列*//*每找到一个解,打印当前棋盘状态*/voidShow(){sum++;cout<<"第"<

8、ut<<"*

9、";else//printf("*");cout<<"

10、";cout<<"---------------------------------";}}/*确定某一位置皇后放置与否,放置则返回1,反之返回0*/intJudge(intk){//测试皇后k在第k行第x[k]列时是否与前面已放置好的皇后相攻击。x[j]==//x[k]时,两皇后在同一列上;abs(k-j)==abs(x[j]-x[k])时,两皇//后在同一斜线上。两种情况两皇后都可相互攻击,故返回0表示不符合条件。for(i

11、ntj=0;j

12、

13、(x[j]==x[k]))return0;return1;}/*主递归函数,搜索解空间中第i层子树*/voidBacktrack(intt){/*t==N时,算法搜索至叶结点,得到一个新的N皇后互不攻击的放置方案*/if(t==N)Show();elsefor(inti=0;i

14、endl;return0;}【运行结果】可知在考虑对称的情况下,8皇后问题共有92种解。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。