八皇后问题的解决完整文档.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
八皇后问题的解决完整文档

淮阴工学院 数据结构课程设计报告 2008 年 6 月 25 日 设计任务书 课题 名称 八 皇 后 设计 目的 用c++语言平台将的92种结构予以实现1)?????系统要求:win98以上操作系统; 2)??????语言平台:tc++或vc++6.0; 3)?????执行文件:八皇后.exe试编写程序实现将八个皇后放置在国际象棋棋盘的无冲突的位置上的算法,并给出所有的解。 起止日期 工 作 内 容 1 2008.6.23~2008.6.24 查阅相关内容 2 2008.6.24~2008.6.25 编写代码及实习报告 3 2008.6.25~2008.6.26 完善课程设计报告 4 2008.6.26~2008.6.27 答辩 指导教师(签章): 2008 年 6 月 30 日 摘要: 八皇后问题要求在一个8*8 而本课程设计本人的目的也是通过用c++语言平台将的92种结构予以实现使用最终将其问题变得一目了然,更加易懂。1. 课题综述 1 1. 1课题的来源及意义 1 1. 2 面对的问题 1 2. 需求分析 1 2. 1 涉及到的知识 1 2. 2 软硬件的需求 1 2. 3 功能需求 2 3. 概要设计 2 4. 详细设计和实现 2 4. 1 算法描述及详细流程图 2 4.1.1 算法描述 3 4.1.2 算法流程图 3 5. 代码编写及详细注释 4 6. 程序调试 7 6. 1调试过程、步骤及遇到的问题 7 7. 运行与测试 7 7.1运行演示 7 总 结 9 致 谢 10 参考文献 11 . 1. 课题综述 1. 1课题的来源及意义 八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出的。 在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同一行或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。所以高斯提出了一个问题:在8*8的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共有多少种解法。 到了现代,随着计算机技术的飞速发展,这一古老而有趣的数学游戏问题也自然而然的被搬到了计算机上。运用所学计算机知识来试着解决这个问题是个锻炼和提高我自己编程能力和独立解决问题能力的好机会,可以使我增强信心,为我以后的编程开个好头,故我选择了这个有趣的课题。 1. 2 面对的问题 1)???解决冲突问题: 这个问题包括了行,列,两条对角线; 列:规定每一列放一个皇后,不会造成列上的冲突; 行:当第I行被某个皇后占领后,则同一行上的所有空格都不能再放皇后,要把以I为下标的标记置为被占领状态;系统要求:win98以上操作系统; 语言平台:tc++或vc++6.0;本课件学生是用循环递归循环来实现的,分别一一测试了每一种摆法,并把它拥有的92种变化表现出来。在这个程序中,的主要思路以及思想是这样的: 1)解决冲突问题: 这个问题包括了行,列,两条对角线; 列:规定每一列放一个皇后,不会造成列上的冲突; 行:当第I行被某个皇后占领后,则同一行上的所有空格都不能再放皇后,要把以I为下标的标记置为被占领状态; 对角线:对角线有两个方向。在这把这两条对角线称为:主对角线和从对角线。在同一对角线上的所有点(设下标为(i,j)),要么(i+j)是常数,要么(i-j)是常数。因此,当第I个皇后占领了第J列后,要同时把以(i+j)、(i-j)为下标的标记置为被占领状态。 2)数据结构的实现 而对于数据结构的实现,学生则是着重于: 数组a[I]:a [I]表示第I个皇后放置的列;I的范围:1..8; 对角线数组:b[j](主对角线),c[j](从对角线),根据程序的运行,去决定主从对角线是否放入皇后;A、 数据初始化。 B、 从n列开始摆放第n个皇后(因为这样便可以符合每一竖列一个皇后的要求),先测试当前位置(n,m)是否等于0(未被占领)。如果是,摆放第n个皇后,并宣布占领(记得姚横列竖列斜列一起设置),接着进行递归;如果不是,测试下一个位置(n,m+1),但是如果当n=8,m=8时,发现此时已无法摆放时,便要进行回溯。从问题的某一种可能出发,搜索从这种情况能出发,继续搜索,这种不断“回溯”的寻找解的方法,称为“回溯法”。、当n8时,便打印出结果。 5. 代码编写及详细注释 #include conio.h #include math.h #include stdlib.h #include stdio.

您可能关注的文档

文档评论(0)

2266670 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档