




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算法大作业电子工程学院A.实验内容在nx n格的棋盘上放置彼此不受攻击的n个皇后,按照国际象棋的规 则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子,求解可以 放置的方法种数。B.问题分析n后问题等于于在nxn格的棋盘上放置n个皇后,任何2个皇后不放 在同一行或同一列或同一斜线上。即规定每一列放一个皇后,不会造成列 上的冲突;当第i行被某个皇后占领后,则同一行上的所有空格都不能再 放皇后,要把以i为下标的标记置为被占领状态。C.算法设计1 .解决冲突问题:这个问题包括了行,歹I,两条对角线;歹|:规定每一列放一个皇后,不会造成列上的冲突;行:当第i行被某个皇后占领后,则同一行上的所有空
2、格都不能再放皇后,要把以i为下标的标记置为被占领状态;对角线:对角线有两个方向。在这我把这两条对角线称为:主对角线和从对角线。在同一对角线上的所有点(设下标为(i,j),要么(i+j)是常数, 要么(i-j)是常数。因此,当第i个皇后占领了第j列后,要同时把以(i+j)、 (i-j)为下标的标记置为被占领状态。2 .算法设计因为 n 皇后问题,从n 大于 11 开始求解过程耗时就很长,所以定义x数组的最大值MAXNUM= 3013最大可解决30皇后问题。1) 判断当前位置是否可放置皇后皇后 k 在第 k 行第 xk 列时, xi=xk 时,两皇后在同一列上 ;abs(xi-xk)=abs(i-
3、k) 时,两皇后在同一斜线上; 两种情况两皇后都可相互攻击,返回false 表示不符合条件。bool Place(int k)int i;i=1;while(i<k)if(xi=xk|abs(xi-xk)=abs(i-k) return false;i=i+1;return true;2) 输出当前解void Print(int x,int n)num+;printf(" 第 %dt 种解法 :(",num);for(int i=1;i<=n;i+)printf("%d,",xi);if(i%n=0)printf(");n"
4、;);3) 回溯法搜索解空间void NQueens(int n)int k=1;x1=0;while(k>0)xk+=1;while(xk<=n&&!Place(k)xk+=1;if(xk<=n)if(k=n)Print(x,n); else k=k+1;xk=0;/回溯至上一行; elsek-;3.实验结果及分析 n皇后问题解的情况皇后的个 数问题的解N=1X=(1)N=2无解N=3无解N=4X1=(2,4,1,3); X2=(3,1,4,2)N=5X1=(1,3,5,2,4); X2=(1,4,2,5,3); X3=(2,4,1,3,5);X4=(2,5
5、,3,1,4);X5=(3,1,4,2,5); X6=(3,5,2,4,1); X7=(4,1,3,5,2);X8=(4,2,5,3,1);X9=(5,2,4,1,3); X10=(5,3,1,4,2)N=6X1=(2,4,6,1,3,5);X2=(3,6,2,5,1,4);X3=(4,1,5,2,6,3);X4=(5,3,1, 6,4,2)N=740个解N=892个解4.实验程序随着N的增大,解的个数增多,以 N=4为例 #include <stdio.h>#include<math.h>#define N 4 /*定义棋盘大小*/static int sum; /*
6、当前已找到解的个数*/static int xN;int place(int k)int j;for (j = 0; j < k; j +)if (xj = xk | abs(j - k) = abs(xj - xk) return 0;return 1;/* 打印棋局*/void chessboard()int i,j;int siteN;printf("第由中解法:n", + sum);for (i = 0; i < N; i +) for (j = 0; j < N; j +)if (j = xi) printf("Q ");si
7、tei=j+1; else printf("* ");printf("n");printf("A%d(",sum);for(i = 0; i < N; i +)printf("%d,",sitei);printf(");");printf("n");/* 回溯搜索解空间*/void backtrack()int k = 0;x0 = -1;while (k >= 0) xk += 1; /*向右移一列*/* 向右移至出最右列或可以放置皇后的列*/while (xk < N) && !(place(k) xk += 1;if (xk < N) /*向右移未移出棋盘*/if (k = N - 1) chessboard(); /*已移至最后一行 */else x+ k = -1; /*向下移一行*/else k -; /*回溯到上一行*/int main(void)backtrack();printf("%d皇后有 d 个解:n",N,sum);return 0;5/ 6实验结果截图:5.流程图从n到珏绽霹意电2匹三亶rJD.心得体会通过算法老师布置的这次大作业,首先使我们更好地理解皇后问题和回溯
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第1课 古代埃及(教学设计)-2024-2025学年九年级历史上册素养提升教学设计(统编版)
- 成功训练-挑战迷宫(教学设计)长春版三年级下册综合实践活动
- 第1课《在线学习》教学设计 2023-2024学年浙教版(2023)初中信息技术八年级上册
- Unit 7 Happy Birthday Section B(1a-2b)教学设计-2024-2025学年人教版(2024)七年级英语上册
- 第5课 第二子目 古代朝鲜与日本文化 教学设计-2023-2024学年高二下学期历史统编版(2019)选择性必修3文化交流预传播
- XXXX学年第二学期学校政教处工作计划范文
- 小学信息技术一年级上册第18课《修正并展示图片》教学设计
- 第7课 隋唐制度的变化与创新 教学设计-2024-2025学年高一上学期统编版(2019)必修中外历史纲要上
- 树脂光学镜片建议书可行性研究报告备案
- 2025年洁净机器人行业深度研究分析报告
- 《HSK标准教程3》第10课
- 中医康复治疗技术复习试题及答案
- 屈光手术分类
- 系统上线验收合格证书
- ABO血型鉴定及交叉配血
- 【重庆长安汽车公司绩效管理现状、问题及优化对策(7600字论文)】
- 计算机网络毕业论文3000字
- 孔轴的极限偏差表
- 热轧钢板和钢带尺寸允许偏差
- 农村公共基础知识
- BBC-商务英语会话
评论
0/150
提交评论