版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
XX级数据结构实验报告实验名称:实验二——栈和队列学生姓名:班级:班内序号:学号:日期:1.实验要求【实验目的】进一步掌握指针、模板类、异常处理的使用掌握栈的操作的实现方法掌握队列的操作的实现方法学习使用栈解决实际问题的能力学习使用队列解决实际问题的能力【实验内容】利用栈结构实现八皇后问题。八皇后问题19世纪著名的数学家高斯于1850年提出的。他的问题是:在8*8的棋盘上放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列、同一斜线上。请设计算法打印所有可能的摆放方法。提示:1、可以使用递归或非递归两种方法实现2、实现一个关键算法:判断任意两个皇后是否在同一行、同一列和同一斜线上2.程序分析2.1存储结构存储结构:栈(递归)2.2关键算法分析【设计思想】由于八皇后问题,可以分解成算法相同的子问题,所以使用递归的方法【伪代码】输入皇后个数nk=1判断k是否大于n3.1是:打印一组可能3.2否:循环行位置1~n判断该位置是否符合要求,若符合记录q[k]的坐标y值k+1重复3【关键算法】1、递归voidQueen::Queens(intk,intn)//计算出皇后的排列,k是当前皇后数量,n是数量上限{inti; if(k>n)//如果达到里要求的数量输出皇后排列 {Print(n); count(); } else//否则在适当的位置添加一个新皇后 { for(i=1;i<=n;i++) if(Check(i,k))//判断该行中该位置放置'皇后'是否符合要求 { q[k]=i;//记录改行中该点的位置 Queens(k+1,n);//放置下一行的'皇后' } }}时间复杂度:O(n²)2、判断皇后放置位置是否符合要求intQueen::Check(inti,intk){ intj; j=1; while(j<k) { if((q[j]==i)||abs(q[j]-i)==abs(j-k))//判断列,判断斜线 return0;//不符合返回0 j++; } return1;//符合返回}2.3其他源代码:时间复杂度:O(n)#include<iostream>#include<cmath>usingnamespacestd;#defineN10classQueen{public: Queen(){num=-1;} voidPrint(intn);//输出皇后的排列,打出的数字为每个皇后的坐标 intCheck(inti,intk);//判断位置是否符合要求 voidQueens(intk,intn);//递归调用 intcount();//计数private: intq[N]; intnum;};voidmain(){ QueenQ; intn; cout<<"请输入Queen的数目(n>0):"<<endl; cin>>n; if(n>0) { cout<<"Queen可能的位置坐标:"<<endl; Q.Queens(1,n); cout<<"共有"<<Q.count()<<"种方法放置Queen"<<endl; } else cout<<"ERROR输入数字错误"<<endl;}voidQueen::Queens(intk,intn)//计算出皇后的排列,k是当前皇后数量,n是数量上限{inti; if(k>n)//如果达到里要求的数量输出皇后排列 {Print(n); count(); } else//否则在适当的位置添加一个新皇后 { for(i=1;i<=n;i++) if(Check(i,k))//判断该行中该位置放置'皇后'是否符合要求 { q[k]=i;//记录改行中该点的位置 Queens(k+1,n);//放置下一行的'皇后' } }}voidQueen::Print(intn){ inti; for(i=1;i<=n;i++) cout<<"("<<i<<","<<q[i]<<")"; cout<<endl;}intQueen::Check(inti,intk){ intj; j=1; while(j<k) { if((q[j]==i)||abs(q[j]-i)==abs(j-k))//判断列,判断斜线 return0;//不符合返回0 j++; } return1;//符合返回}intQueen::count(){ num++; returnnum;}3.程序运行结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子商务数据化运营-电子教案
- 2025 高中信息技术信息系统在职业培训学校校企合作与就业服务管理中的应用课件
- 第1章 消费者行为学概述
- 2026年会议室预订函(3篇)范文
- 生态环境修复改善承诺书5篇
- 电子竞技团队稳定保障承诺书4篇
- 教师资格定期注册申请表
- 我和我的语文老师记叙文12篇
- 展会合作意向书回复8篇范本
- 消化科穴位贴敷治疗应用
- 休克诊疗规范课件
- 2025年新生儿窒息复苏试题及答案
- 20万吨-年采矿废石综合回收利用项目环境影响报告书
- (一诊)2026年兰州市高三模拟考试历史试卷(含答案)
- 2025-2026学年教科版(新教材)初中信息科技八年级第二学期教学计划及进度表
- 2026贵州安顺关岭恒升村镇银行春季招聘4人考试参考题库及答案解析
- 企业内部福利待遇制度
- 2026年医疗AI辅助手术报告
- 2026年六安职业技术学院单招职业适应性考试题库含答案详解(考试直接用)
- 热风循环烘箱验证方案及报告
- 中学教师职称晋升(中学英语)专业考试说明书及试卷
评论
0/150
提交评论