ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:293.47KB ,
资源ID:12592011      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12592011.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北邮信通院数据结构实验二八皇后问题实验报告内附源代码完整版.docx)为本站会员(b****0)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北邮信通院数据结构实验二八皇后问题实验报告内附源代码完整版.docx

1、北邮信通院数据结构实验二 八皇后问题实验报告内附源代码完整版数据结构实验报告实验名称: 实验二八皇后问题学生姓名: 班 级: 班内序号: 学 号: 日 期: 2014年11月27日1 实验要求【实验目的】 进一步掌握指针、模板类、异常处理的使用 掌握栈的操作的实现方法 掌握队列的操作的实现方法 学习使用栈解决实际问题的能力 学习使用队列解决实际问题的能力【实验内容】 利用栈结构实现八皇后问题。 八皇后问题19世纪著名的数学家高斯于1850年提出的。他的问题是:在8*8的棋盘上放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列、同一斜线上。请设计算法打印所有可能的摆放方法。提

2、示:1、可以使用递归或非递归两种方法实现2、实现一个关键算法:判断任意两个皇后是否在同一行、同一列和同一斜线上2. 程序分析 2.1 存储结构存储结构:栈(递归)2.2 关键算法分析 递归调用摆放皇后1、关键算法伪代码:(1).如果输入的row大于皇后的数量,则输出皇后的位置(2) 否则col从0开始递增(3) 检测(row,col)上的点是否符合条件,不符合则col自增,符合则转到下一个皇后的排列2、代码详细分析:void SeqStack:PlaceQueen(int row) /摆放皇后 for (int col=0;col n;col+) /遍历07, Push(col); if (C

3、heck() /判断摆放皇后的位置是否合适 if (row n-1) /若还没有放到最后一个,则进行下一个皇后的放置 PlaceQueen(row+1); else num+; /计数器加1 Print(n); /打印成功的坐标点 Pop(); /若不符合条件则出栈 3、计算时间复杂度:O(n)判断皇后位置是否合适:1、 关键算法伪代码:对于一个坐标,将前面每一个坐标均与这个坐标比较若在同一列或在同一斜线上,则返回0,否则j自增1,面每一个坐标与前面做比较若与前面坐标在同一列最后返回2、 代码分析:bool SeqStack:Check() for(int i=0;itop;i+) /依次检查

4、前面已摆放的皇后位置 if(datatop=datai|(abs(datatop-datai)=(top-i) /判断是否在同一列同一斜线 return false; return true;3、 时间复杂度:O(n)2.3 其他 说明:由于输出显示时对话框有限,而程序结果比较多,占用空间大,运用输出坐标位置来表示,则可以输出全部解。3. 程序运行结果 (1)程序框图:(2)程序代码:#include using namespace std;const int m=1024; /定义栈的最大高度int num=0; /初始化方案种类计数器 int n; /摆放的皇后个数 class SeqSt

5、ack /定义顺序栈 public: SeqStack()top=-1; /构造函数,初始化空栈 void Push(int x); /入栈 void Pop(); /出栈 void PlaceQueen(int row); /摆放皇后的递归函数 bool Check(); /判断是否在同一行同一列同一斜线 void Print(int n); /打印以坐标的形式 bool Empty(); /判别栈是否为空 private: int datam; /定义数组 int top; /栈顶指针;void SeqStack:Push(int x) /入栈操作 if(top= m-1) throw 上

6、溢; top+; /栈顶指针上移 datatop=x; void SeqStack:Pop() /出栈操作 if(Empty() throw 下溢; top-; /栈顶指针下移 void SeqStack:PlaceQueen(int row) /摆放皇后 for (int col=0;col n;col+) /遍历07, Push(col); if (Check() /判断摆放皇后的位置是否合适 if (row n-1) /若还没有放到最后一个,则进行下一个皇后的放置 PlaceQueen(row+1); else num+; /计数器加1 Print(n); /打印成功的坐标点 Pop()

7、; /若不符合条件则出栈 bool SeqStack:Empty() if(top=-1) return true; else return false; bool SeqStack:Check() for(int i=0;itop;i+) /依次检查前面已摆放的皇后位置 if(datatop=datai|(abs(datatop-datai)=(top-i) /判断是否在同一列同一斜线 return false; return true; void SeqStack:Print(int n) /将栈的数组形式打印成坐标 int i; for(i=1;i=n;i+) cout(i,datai-

8、1+1); coutendl;void main() cout0)n; if(n1024) cout输入错误endl; SeqStack Queen; /定义类的对象 Queen.PlaceQueen(0); /从栈底开始赋值 cout Queen可能的摆放位置种类:numendl; /输出摆放方法的总数(3)运行结果:4. 总结 调试时出现的问题: 最初由于递归的思想未能很好掌握,导致几次调试都出现比较严重的错误;且在运用该方法时,未能将八皇后问题的具体思路搞清,没有考虑“如果前次的皇后放置错误导致后面的放置无论如何都不能满足要求,在设计递归算法总是只显示几种,为了将92种情形全部打印,采用坐标的形式。使用了栈的存储结构来存储位置的纵坐标,不符合时将其出栈,要注意栈是否为空。总结:这次实验让我更好地掌握了栈思想以及函数的嵌套调用等等知识,以及一些书本上没有的东西,让我学会了运用递归算法去解决一些复杂的问题。另外,在写程序时,要避免由于粗心造成的低级错误,减少调试的次数。改进:不仅可以设计放置八皇后,只要修改输入的N,便可显示其他情况的结果。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1