北邮数据结构实验2八皇后.doc_第1页
北邮数据结构实验2八皇后.doc_第2页
北邮数据结构实验2八皇后.doc_第3页
北邮数据结构实验2八皇后.doc_第4页
北邮数据结构实验2八皇后.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构实验报告实验名称: 实验二栈和队列学生姓名:班 级:班内序号:学 号:日 期:1实验要求实验目的:1、 进一步掌握指针、模板类、异常处理的使用2、 掌握栈的操作的实现方法3、 掌握队列的操作的实现方法4、 学习使用栈解决实际问题的能力5、 学习使用队列解决实际问题的能力实验内容:利用栈结构实现八皇后问题。八皇后问题19世纪著名的数学家高斯于1850年提出的。他的问题是:在8*8的棋盘上放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列、同一斜线上。请设计算法打印所有可能的摆放方法。提示:1、可以使用递归或非递归两种方法实现2、实现一个关键算法:判断任意两个皇后是否在同一行、同一列和同一斜线上2. 程序分析2.1 存储结构 存储结构:栈2.2 关键算法分析设计思想:由于八皇后问题,可以分解成算法相同的子问题,所以使用递归的方法伪代码:1. 输入皇后个数n2. i=13. 判断i是否大于n4. 是:打印一组可能5. 否:循环行位置1n6. 判断该位置是否符合要求,若符合记录datai7. i+1 重复关键算法:1、 递归算法步骤:1. 如果输入的row大于皇后的数量,则输出皇后的位置2. 否则row从0开始递增3. 检测(row,col)上的点是否符合条件,不符合则row自增,符合则转到下一个皇后的排列时间复杂度:O(n)2、 判断皇后放置位置是否符合要求for(int i=0;itop;i+) /依次检查前面各行的皇后位置if(datatop=datai|(datatop-datai)=(top-i)|(datai-datatop)=(top-i) 算法步骤:1. 对于一个坐标,将前面每一个坐标均与这个坐标比较;2. 若在同一列或在同一斜线上,则返回false;3. 否则i自增1,面每一个坐标与前面做比较4. 若都不相等,则返回true时间复杂度:O(n)2.3 其他源代码:#include using namespace std;const int NumOfQ=8; /number of queenint number=0; /方案计数template class SeqStackpublic:SeqStack()top=-1;void Push(T x);void Pop();void Queen(int row); /放置皇后bool Check(); /判断是否可以放置皇后void print(); /打印bool Empty()if(top=-1) return true;else return false; /判别栈是否为空private:T dataNumOfQ;int top;template void SeqStack:Push(T x) /入栈if(top=NumOfQ-1) throw 上溢;top+;datatop=x;template void SeqStack:Pop() /出栈if(Empty() throw 下溢;top-;template bool SeqStack:Check()for(int i=0;itop;i+) /依次检查前面各行的皇后位置 if(datatop=datai|(datatop-datai)=(top-i)|(datai-datatop)=(top-i) /判断是否可以放置皇后return false; return true;template void SeqStack:print() /将栈的数组形式打印成棋盘形式coutNO.+number:endl;for(int i=0;iNumOfQ;i+)for(int j=0;jdatai;j+)cout*; /不放置处打印“*”coutdatai;j-)cout*;coutendl; /换行coutendl;template void SeqStack:Queen(int row) /在栈顶放置符合条件的值的操作,即摆放皇后for(int col=0;colNumOfQ;col+) /找到row行可以放置皇后的colPush(col);if (Check() /判断是否可以放置皇后 if (rowNumOfQ-1) /若还没有放到第八个皇后,则进行下一个皇后的放置Queen(row+1);elseprint(); /打印 Pop(); /若不符合条件则出栈 int main()SeqStack Queen; /定义类try Queen.Queen(0);catch(char*s) coutsendl;3. 程序运行结果(1)测试主函数流程(2)测试条件n=8(3)测试结论测试正常,如图4. 总结调试时出现的问题:1.for与if的循环嵌套未能很好掌握,导致几次调试都出现比较严重的错误;且在运用该方法时,未能将八皇后问题的具体思路搞清,没有考虑“如果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论