下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上算法设计及分析 n皇后问题-回溯求解国际象棋中皇后威力很大,它可以象“车”一样沿直线上下或左右移动;也可以如同“象”那样沿着斜线移动。双方的皇后是不能在同一行或同一列或同一斜线上对持的。那么,在一张空白的国际象棋盘上最多可以放上几个皇后并且不让它们互相攻击呢?这个问题是伟大数学家高斯在十九世纪中期提出来的,并作了部分解答。高斯在棋盘上放下了N个互不攻击的皇后,他还认为可能有N种不同的放法,这就是有名的“N皇后”问题。如果你动手试试,就一定会发现开头几颗皇后很容易放置,越到后来就越困难。由于我们的记忆有限,很可能在某个位置放过子后来证明不行取消了,但是以后又重新放上子去
2、试探,这样就会不断地走弯路,花费大量的精力。因此,必须找到一个简易有效、有条不紊的法则才行。回溯法的基本思想:对于用回溯法求解的问题,首先要将问题进行适当的转化,得出状态空间树。这棵树的每条完整路径都代表了一种解的可能。通过深度优先搜索这棵树,枚举每种可能的解的情况;从而得出结果。在深度优先搜索的过程中,不断的将每个解(并不一定是完整的,事实上这也就是构造约束函数的意义所在)与约束函数进行对照从而删除一些不可能的解,这样就不必继续把解的剩余部分列出从而节省部分时间。不妨以8皇后为例,设8皇后为xi,她们分别在第i行(i=1,2,3,4,5,6,7,8),这样问题的解空间就是一个8个皇后所在列的
3、序号,为n元一维向量(x1,x2,x3,x4,x5,x6,x7,x8),搜索空间是1xi8(i=1,2,3,4,5,6,7,8),共88个状态。约束条件是8个点(1,x1),(2,x2),(3,x3),(4,x4),(5,x5),(6,x6),(7,x7),(8,x8)不在同一列和同一对角线上。虽然问题共有88个状态,但算法不会真正地搜索这么多的状态,因为回溯法采用的是“走不通就掉头”的策略,而形如(1,1,x3,x4,x5,x6,x7,x8)的状态共有86个,由于1,2号皇后在同一列不满足约束条件,回溯后这些状态是不会搜索的。算法设计:我们用三个数组c,b,d分别记录棋盘上的n个列,2n-1
4、个住对角线和2n-1个副对角线的占用情况。用i,j分别表示皇后所在的行列,用表达式i-j+n对主对角线编号,范围是12n-1,用i+j为负对角线编号,范围为22n. 程序代码:专心-专注-专业#include"stdio.h"int a20,b20,c40,d40,n,i,k;int t=0; /t记录解的个数void output()t=t+1;printf("第%d个解:",t);for(k=1;k<=n;k+)printf("%d",ak);printf("n");void find(int i)int
5、 j;for(j=1;j<=n;j+) /第i个皇后有n种可能位置if(bj=0&&ci+j=0&&di-j+n=0) /判断位置是否冲突ai=j; /摆放皇后bj=1; /占领第j列ci+j=1;/占领两个对角线di-j+n=1;if(i<n)find(i+1); /n个皇后没有摆完,递归摆放下一皇后elseoutput(); /完成任务,打印结果bj=0; /回溯ci+j=0;di-j+n=0;void main()printf("皇后问题n=");scanf("%d",&n);for(i=1;i&
6、lt;=n;i+)bi=0;ci=0;di=0;ci+n=0;di+n=0;find(1);n=4时的运行结果:解的放置方式如图:n=6时的运行结果:解的放置方式如图:算法分析:数组b,c,d分别用来标记冲突。数组b代表列冲突,如果某列上已经有皇后,则为1,否则为0;数组c代表主对角线冲突,如果某条主对角线上已经有皇后,则为1,否则为0;数组d代表从对角线冲突,如果某条从对角线上已经有皇后,则为1,否则为0。回溯法是一种满足某约束条件的穷举式搜索技术,适应于解决一些组合数相当大的问题。其优点在于其程序结构明确,可读性强,易于理解,而且通过对问题的分析可以大大提高运行效率。其程序编写相对复杂,且消耗很多的资源,但其实际情况较简单。递归是一种很古老的算法,其应用的也十分的广泛,在很多复杂的程序中也是经常性的使用,递归的优点是编写简单,缺点是消耗资源大。本程序采用回溯算法和递归,把八皇后问题的调用函数融
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 26年甲状腺癌NGS检测质控手册
- 胆囊炎患者急性期饮食护理建议
- 少儿速写人物课件
- 感恩教育座谈会实施纲要
- 广东省广州市2024-2025学年八年级上学期期末地理试卷(含答案)
- 2026新生儿气道及呼吸机管路护理要点解析
- 防灾减灾活动中班教案
- 现代教育技术发展与应用
- 六灾安全教育
- 健康饮食教育核心体系
- 2026年同等学力申硕英语模拟卷
- 摩根士丹利 -半导体:中国AI加速器-谁有望胜出 China's AI Accelerators – Who's Poised to Win
- 2026辽宁沈阳汽车集团有限公司所属企业华亿安(沈阳)置业有限公司下属子公司招聘5人笔试历年参考题库附带答案详解
- 2026年公路养护工职业技能考试题库(新版)
- 2026中国广播影视出版社有限公司高校毕业生招聘3人备考题库含答案详解(完整版)
- 宜宾市筠连县国资国企系统2026年春季公开招聘管理培训生农业考试模拟试题及答案解析
- 2026年福建南平市八年级地生会考考试真题及答案
- 2025-2030非洲智能汽车零部件行业市场供需理解及投资潜力规划分析研究报告
- GA/T 718-2007枪支致伤力的法庭科学鉴定判据
- 贞丰县乡镇地图PPT黔西南布依族苗族自治州贞丰县行政区划可
- 湖南省衡阳市南岳区事业单位考试历年真题
评论
0/150
提交评论