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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

八皇后问题.docx

1、八皇后问题摘要: 八皇后问题要求在一个的棋盘上放上个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子因此,八皇后问题等于要求八个皇后中的任意两个不能被放在同一行或同一列或同一斜线上。 该课程设计的目的是通过用C+语言平台将一个的棋盘上放上个皇后,使得每一个皇后既攻击不到另外七个皇后,也不被另外七个皇后所攻击的92种结构予以实现。该课程设计使用非递归算法实现。采用的思路大致是这样: 将一个皇后向下移动一个位置; 如果没有成功移动(超出边界),失败; 如果成功移动,则判断当前位置是否可用?如果不

2、可用,则重做 1; 继续给下一个皇后安排位置。关键词: 八皇后 ; C+ ; 非递归法 目 录1. 课题综述 11. 1课题的来源及意义 11. 2 面对的问题 12. 需求分析 12. 1 涉及到的知识 12. 2 软硬件的需求 12. 3 功能需求 23. 概要设计 34. 详细设计和实现 24. 1 算法描述及详细流程图 24.1.1 算法描述 34.1.2 算法流程图 35. 代码编写及详细注释 46. 程序调试 76. 1调试过程、步骤及遇到的问题 77. 运行与测试 78. 总 结 91. 课题综述1. 1课题的来源及意义 八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数

3、学家高斯1850年提出的。在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同一行或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。所以高斯提出了一个问题:在8*8的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共有多少种解法。在当今这个计算机技术的飞速发展的时代,这一古老而有趣的数学游戏问题也自然而然的被运用到计算机上。通过所学计算机知识来试着解决这个问题,一方面可以锻炼和提高我们自己编程能力,另一方面也可以加强与同学老师之间的交流合作能力。1. 2 面对的问题1.2.1 解决冲突问题: 该问题包括了行,列,两

4、条对角线; 列:规定每一列放一个皇后,不会造成列上的冲突; 行:当第I行被某个皇后占领后,则同一行上的所有空格都不能再放皇后,要把以I为下标的标记置为被占领状态;对角线:对角线有两个方向,在同一对角线上的所有点都不能有冲突1.2.2 用非递归算法解决问题。 2. 需求分析2. 1 涉及到的知识 本次课程设计中,用到的主要知识有:非递归法的运用,for语句的灵活运用,数据结构中树知识的灵活运用、栈及数组的掌握。2. 2 软硬件的需求 语言平台:c+语言平台 2. 3 功能需求 当运行程序时,在屏幕上显示每一种方法八个皇后的相对位置,要用比较直观 的界面显示。3. 概要设计本课件学生是用循环递归循

5、环来实现的,分别一一测试了每一种摆法,并把它拥有的92种变化表现出来。在这个程序中,我的主要思路以及思想是这样的: 1、解决冲突问题: A:将一个皇后向下移动一个位置; B:如果没有成功移动(超出边界),失败; 如果成功移动,则判断当前位置是否可用?如果不可用,则重做 A; 继续给下一个皇后安排位置。2、数据结构。(1)解数组A。AI表示第I个皇后放置的列;范围:1.8(2)行冲突标记数组B。BI=0表示第I行空闲;BI=1表示第I行被占领;范围:1.8(3)对角线冲突标记数组C、D。CI-J=0表示第(I-J)条对角线空闲;CI-J=1表示第(I-J)条对角线被占领;范围:-7.7DI+J=

6、0表示第(I+J)条对角线空闲;DI+J=1表示第(I+J)条对角线被占领;范围:2.163、结束条件: 如果第一个皇后的所有位置都尝试完毕仍然没有可用的解决方案或者最后一个皇后已经安排完毕4. 详细设计和实现4. 1 算法描述及详细流程图4.1.1 算法描述1、数据初始化。2、从n列开始摆放第n个皇后(因为这样便可以符合每一竖列一个皇后的要求),先测试当前位置(n,m)是否等于0(未被占领):如果是,摆放第n个皇后,并宣布占领(记得要横列竖列斜列一起来哦),接着进行递归;如果不是,测试下一个位置(n,m+1),但是如果当n;8时,便一一打印出结果。4.1.2 算法流程图5. 代码编写及详细注

7、释#include#include#includeusing namespace std;struct Nodeint level;/ Xint pos;/ Y;int Find( Node node );void Print();int Current9;/close tableint Num;/keep the num of the ansstack My_stack;int main()int i;Num=0;Node node; /结点Node te;for(i=8;i=1;i-)node.level=1;node.pos=i;/ initalise x and yMy_stack.p

8、ush( node );/initalise stackwhile( !My_stack.empty() & Num=92 )node=My_stack.top();Current node.level =node.pos;if( ! Find( node ) )/ 找出当前节点的下一个节点,并且将它压人堆栈,返回1,否则返回0(没找到);My_stack.pop();te=My_stack.top();while(node.level!=te.level)node=te;My_stack.pop();te=My_stack.top();/如果当前层的最后一个都不行,则将上层的一个剔除/ife

9、lsenode=My_stack.top();if( node.level=8 )Currentnode.level=node.pos;Print();/输出组合,且Num+;/将当前的节点弹出,一边扩展其他的节点。 My_stack.pop();te=My_stack.top();while(node.level!=te.level)node=te;My_stack.pop();te=My_stack.top();/if/else/main whilereturn 1;int Find( Node node )int i;bool temp9;bool flag=false;Node no;

10、for( i=1; i= node.level; i+)temp Currenti =false;if( Currenti+i-node.level-1 9) temp Currenti+i-node.level-1 =false;if( Currenti-i+node.level+1 9)/越界了temp Currenti-i+node.level+1 =false;/forfor(i=1;i9;i+)if( tempi!=false )no.level=node.level+1;no.pos=i;My_stack.push(no);flag=true;/forif( flag ) retu

11、rn 1;return 0;void Print()int i,j;Num+;coutNum: endl;for(i=1;i9;i+)for(j=1;j9;j+)if( j=Currenti )cout *;else cout .;/forcoutendl;getchar();6. 程序调试6. 1调试过程、步骤及遇到的问题当非递归的算法代码输入完毕后后运行时有N多错误,这些错误有的是符号的输入格式有误,有的是头文件的引用没有完善:例如:当用printf输出时,经调试后,发现原来是缺少了stdio.h这样一个头文件。还有的是函数的算法有误、逻辑错误导致程序死循环或不循环或循环是小部分,虽然编译时却没有错误,但是输出结果不正确。通过和同学的多次交流现并在网上搜集了相关资料之后最后解决了问题。7. 运行与测试总 结 通过这次的课程设计,我从中学到了许多软件设计的思路和经验,提高了我们的创新能力。通过对数据结构的深刻掌握,对我们选择一个好的算法是很重要的,可以锻炼我们的逻辑思维能力。本次课程设计八皇后问题采用了非递归算法,虽然大大的增加了程序的复杂度,但是可以让我深深体会到一个问题的解决由于用到的数据结构不同,效率是不同的。

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

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