版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算法分析与设计实验报告第 六 次实验姓名学号班级时间12.12上午地点工训楼309 实验名称回溯法实验(n皇后问题)实验目的1. 掌握回溯法求解问题的思想2. 学会利用其原理求解相关问题实验原理用n元组x1:n表示n后问题的解。其中,xi表示皇后i放在棋盘的第i行的第xi列。由于不允许将2个皇后放在同一列上,所以解向量中的xi互不相同。2个皇后不能放在同一斜线上是问题的隐形约束。用回溯法解n后问题时,用完全n叉树表示解空间。可行性约束Place剪出不满足行、列和斜线约束的子树。递归函数Backtrack(1)实现对整个解空间的回溯搜索。 Backtrack(i)搜索解空间中第i层子树。类Que
2、en的数据成员记录解空间中结点信息,以减少传给Backtrack的参数。Sum记录当前已找到的可行方案数。实验步骤数组法:(1)根据n皇后问题,可以把其设想为一个数组;(2)根据n皇后的规则,可以设想为数组上同一直线,横线,斜线的数字都不能相同,由此可以得到判断条件;(3)根据判断条件之后,建立回溯点,即可解决问题。堆栈法:(1) 检索当前行是否可以放置一个皇后;(2) 利用检索过程,通过递归的方式,来确定每一个皇后的位置。关键代码递归回溯:void Queen:Backtrack(int t)if(tn)sum+;/*for(int i=1;i=n;i+) /输出皇后排列的解coutxi ;
3、coutendl;*/else/回溯探索第i行的每一列是否有元素满足要求for(int i=1;i0) xk += 1; /先将皇后放在第一列的位置上 while(xk=n)&!(Place(k) /寻找能够放置皇后的位置 xk += 1; if(xk=n) /找到位置 if(k = n) /如果寻找结束输出结果 /*for (int i=1;i=n;i+) coutxi ; coutendl; */ sum+; else /没有结束则找下一行 k+; xk=0; else /没有找到合适的位置则回溯 k-; 测试结果较小皇后个数结果: 递归法较大的皇后个数: 迭代法较大的皇后个数: 输入较大
4、的皇后个数15:输入皇后个数是16时:当输入的皇后个数是20时:运行了一个上午都没有出结果,所以果断放弃了。实验分析在上述的实验结果中:(1) 我们可以观察到输出皇后排序结果与不输出结果,只输出解的个数是有差距的。(2) 而且通过对比递归与迭代两种不同的实现方法,发现情况是基本相同的,时间上并没有什么太大的差距,但是相对的迭代会稍微快一点点。(3) 然后对比输入较大的皇后个数之后,仅仅一个皇后之差就会使得时间上相差很大,如15个皇后的时候所用的时间是280.102,而当皇后个数是16时,所用的时间是2153.463,从而我们可以看出n皇后问题的时间复杂度是指数级的,从而n皇后问题确实是NP问题
5、。实验心得Dijkstra算法在之前的数据结构中就学过,在当时只是学过这种思想,并没有去深思这种思想其背后到底是一种怎样的思想在里面。后来经过本门课的学习,对于贪心算法有了更深刻的了解,也知道了如何利用贪心算法去解决问题。最开心的是经过一定时间的练习,我的编程能力有了一定的提高,之前看见就很头疼的问题,现在也能静下心来去思考,而且实现Dijkstra算法也可以通过一定程度的思考也能写出来了,感觉还是很开心的。Dijkstra算法求单源最短路径在很多地方都有应用,经过一次又一次的练习,终于能好好的掌握这一算法了,还是希望不要那么快忘记啊。实验得分助教签名附录:完整代码(回溯法)/回溯算法 递归回
6、溯 n皇后问题#include#include#include#includemath.husing namespace std;class Queenfriend int nQueen(int); /定义友元函数,可以访问私有数据private:bool Place(int k); /判断该位置是否可用的函数void Backtrack(int t); /定义回溯函数int n; /皇后个数int *x; /当前解long sum; /当前已找到的可行方案数;int main()int m,n;for(int i=1;i=1;i+) coutn;cout皇后问题的解为:endl;clock_
7、t start,end,over; /计算程序运行时间的算法start=clock();end=clock();over=end-start;start=clock(); m=nQueen(n); /调用求解的函数coutn皇后问题共有;coutm个不同的解!endl; /输出结果end=clock();printf(The time is %6.3f,(double)(end-start-over)/CLK_TCK); /显示运行时间coutendl;system(pause);return 0;bool Queen:Place(int k)/传入行号for(int j=1;jn)sum+;
8、/*for(int i=1;i=n;i+) /输出皇后排列的解coutxi ;coutendl;*/else/回溯探索第i行的每一列是否有元素满足要求for(int i=1;i=n;i+)xt=i;if(Place(t)Backtrack(t+1);int nQueen(int n)Queen X; /定义Queen类的对象X/初始化XX.n=n;X.sum=0;int *p=new intn+1; /动态分配for(int i=0;i=n;i+) /初始化数组pi=0;X.x=p;X.Backtrack(1);delete p;return X.sum;/输出解的个数完整代码(回溯法)/回溯
9、算法 迭代回溯 n皇后问题#include #include#include#include math.h using namespace std; class Queen friend int nQueen(int); /定义友元函数 private: bool Place(int k); /定义位置是否可用的判断函数 void Backtrack(void); /定义回溯函数 int n; / 皇后个数 int *x; / 当前解 long sum; / 当前已找到的可行方案数 ; int main() int n,m; for(int i=1;i=1;i+)coutn;coutn皇后问题
10、的解为:endl;clock_t start,end,over; /计算程序运行时间的算法start=clock();end=clock();over=end-start;start=clock(); m=nQueen(n); /调用求解皇后问题的函数coutn皇后问题共有; coutm个不同的解!endl; end=clock();printf(The time is %6.3f,(double)(end-start-over)/CLK_TCK); /显示运行时间coutendl;system(pause); return 0; bool Queen:Place(int k) for (int j=1;j0) xk += 1; /先将皇后放在第一列的位置上 while(xk=n)&!(Place(k) /寻找能够放置皇后的位置 xk += 1; if(xk=n) /找到位置 if(k = n) /如果寻找结束输出结果 /*for (int i=1;i=n;i+) coutxi ; coutendl; */ sum+; else /没有结束则找下一行 k+; xk=0; else /没有找到合适的位置则回
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 节能项目节能量核算技术规范
- 河道拓浚整治竣工验收报告
- 公司差旅管理制度
- 2025-2026学年师说的教学设计和逐字稿
- 2025-2026学年渔舟唱晚欣赏教学设计
- 2025-2026学年西游故事剧场教案
- 2025-2026学年幼儿亲子游戏教案
- 常山县2024年浙江衢州常山县“英才荟”事业单位紧缺急需人才招聘18人(事业编制)笔试历年参考题库典型考点附带答案详解
- 2025-2026学年黑与白教学设计
- 国家事业单位招聘2025国家课程教材研究所招聘(二)笔试历年参考题库典型考点附带答案详解
- 2026年广东省安全员C证(专职安全生产管理人员)模拟考试试题(含答案)
- 2026重庆大渡口区跃进村街道办事处街道聘用人员招聘4人笔试备考题库及答案详解
- 体态康复模板
- T/CAPE 11005-2023光伏电站光伏组件清洗技术规范
- 肿瘤破溃伤口处理
- 公司承包给个人经营合同
- 输尿管成形术后护理
- 伴生放射性矿开发利用企业环境辐射监测要求、监测年度报告格式与内容
- 受灾群众集中转移安置方案及受灾群众基本生活保障方案
- 中国证监会证券市场交易结算资金监控系统证券公司接口规范
- 实验室试剂管理培训
评论
0/150
提交评论