数据结构课程设计-四、八、N皇后问题.doc

数据结构课程设计-四、八、N皇后问题.doc

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

计算机与软件工程学院 课程设计说明书 课 程 名 称: 数据结构与算法-课程设计 课 程 代 码: 106014389 题 目: 四、八、N皇后问题 年级/专业/班: 学 生 姓 名: 学   号: 312012080611523 开 始 时 间: 年 月 日 完 成 时 间: 年 月 日 课程设计成绩: 学习态度及平时成绩(30) 技术水平与实际能力(20) 创新(5) 说明书撰写质量(45) 总 分(100) 指导教师签名: 年 月 日 摘 要 解决八皇后问题主要利用了递归法、回溯法,以及对for语句、数据结构中树的灵活运用、和对栈及数组的掌握。编程实现了在8*8的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面。编程实现了任意给定一个初始位置,输出八皇后问题的一个布局。本次设计旨在学习各种算法,训练对基础知识和基本方法的综合运用及变通能力,增强对算法的理解能力,提高软件设计能力。在实践中培养独立分析问题和解决问题的作风和能力。 关键词:递归法; 回溯法; 顺序栈;数组; 目 录 1需求分析 6 2开发及运行平台 7 3 概要设计 8 4 详细设计 10 5 调试分析 11 6 测试结果 12 12 6.2 调试结果 12 13 7 结论 14 通过这次的课程设计,让我了解了八皇后这一经典的问题。同时让我更好地掌握了栈思想以及一维数组等等知识,以及一些书本上没有的东西,这对我以后的学习生涯以及将来步入社会起到很大的帮助。这次课程设计虽然花了我很多时间和精力,但很值得,因为它对我能力提高起到很大帮助。这次课程设计也提醒我以前知识的匮乏,它给我敲响了警钟,让我意识到自己基础的不扎实.当然这次实验还是有很多问题的。比如程序设计的界面不够好,一些程序并非自己所写,而是修改某些程序而成,但这些不该,在下次课程设计时不会再发生。 14 参考文献 15 附 录 16 1需求分析 八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850年提出的,并作了部分解答。高斯在棋盘上放下了八个互不攻击的皇后,他还认为可能有76种不同的放法,这就是有名的“八皇后”问题。? 在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同一行或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。所以高斯提出了一个问题:在8*8的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共有多少种解法。现在我们已经知道八皇后问题有92个解答。 本次课设要求指定任一初始位置,即可输出八皇后问题的所有行列布局。拓展完成四皇后问题。 2开发及运行平台 运行平台:Windos98/2000以上 开发平台:Microsoft Visual C++ 6.0 3 概要设计 3.1 结构设计理念 从n列开始摆放第n个皇后(因为这样便可以符合每一竖列一个皇后?的要求),先测试当前位置(n,m)是否等于0(未被占领)。如果是,摆放第n个皇后,并宣布占领,接着进行递归;如果不是,测试下一个位置(n,m+1),但是如果当n=8,m=8时,发现此时已无法摆放时,便要进行回溯。从问题的某一种可能出发,搜索从这种情况能出发,继续搜索,这种不断“回溯”的寻找解的方法,称为“回溯法”。?? 使用数组实现回溯法的思想。 当n8时,便打印出结果。 3.2 类设计 类定义:class类名{ 细节(数据成员,成员函数); } 类函数定义:返回类型 类名::函数名(形参表){ 函数体; } 设计类eightqueen,利用类的成员函数Find求解。 用数据s[1...8]表示顺序栈,栈的下标表示皇后所在的行号,栈的内容表示所在列号。 用a[j],b[i+j],c[i-j]三个布尔数组(初值为真)检查皇后是否在列、主对角线、从对角线上冲突。a[j]=0,b[i+j]=0,c[i-j]=0表示未冲突。a[j]=1表示j列冲突(范围1-8),b[i+j]=1表示第i+j条对角线↗冲突(范围-7-7),若c[i-j]=1表示第i-j条对角线↖冲突(范围2-16)。 如在(i,j)上放置皇后,若满足a[j]b[i+j]c[i-j],则安全。 这个程序主要由4个模块组成,分别是画棋盘模块,

文档评论(0)

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

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

1亿VIP精品文档

相关文档