- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
合肥学院
计算机科学与技术系
课程设计报告
2013 ~2014 学年第 二 学期
课程 数据结构与算法 课程设计名称 八个皇后问题 学生姓名 王雪梅 学号 110座机电话号码 专业班级 11级计本(班) 指导教师 何立新、檀明
2013 年6月
合肥学院数据结构与算法设计报告
目 录
课程设计目的
内容概要
关键词
正文
1、问题分析和任务
数据结构的选择和概要设计
详细设计和编码
上机调试
测试结果及其分析
用户使用说明
参考文献
附录
心得体会
鸣谢
课程设计目的:
“数据结构与算法”精品课程建设组根据“数据结构与算法”课程教学大纲的要求,精心选择了一批课程设计题目,要求学生选择其中的题目,通过独立解决这些问题,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用,按“课、程设计教学大纲”的要求完成“数据结构与算法课程设计报告”。使学生深刻理、解、牢固掌握数据结构和算法设计技术,提高分析和解决实际问题的能力。在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练
内容概要:
众所周知的八皇后问题是一个非常古老的问题,具体如下:在8*8的国际象棋棋盘上放置了八个皇后,要求没有一个皇后能吃掉另一个皇后,即任意两个皇后都不处于棋盘的同一行、同一列或同一对角线上,这是做出这个课题的基础。要求编写实现八皇后问题的递归解法或非递归解法,对于任意给定的一个初始位置,输出八皇后问题的一个布局。本次设计旨在学习各种算法,训练对基础知识和基本方法的综合运用及变通能力,增强对算法的理解能力,提高软件设计能力。在实践中培养独立分析问题和解决问题的作风和能力。 图1八皇后棋盘实例
图1八皇后棋盘实例
关键词: 八皇后,递归法,回溯法,数组…….
正文:
问题分析和任务定义:
八皇后问题是一个古老而著名的问题。该问题是十九世纪著名的数学家高斯1850提出;在8×8格的国际象棋上摆放八皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后人有人用图论的方法解出92宗结果。虽然问题的关键在于如何判定某个皇后所在的行、列、斜线是否有别的皇后;可以从矩阵的特点上找到规律,如果在同一行,则行号相同;如果在同一列上,则列号相同;如果同在“/”斜线上的行列值之和相同;如果在对角线上,则行列号之和或之差相等,逐个纪录符合题意的情况,最终得出解。
本程序需要解决的问题有:
1、建立合适的数据类型表示皇后在棋盘上所处的位置。
2、成功的输出全部正确的放置方法。
3、画出棋盘形式,在上面依次显示出其行走的过程。
4、尽可能的使程序可以执行其他的皇后问题
二、数据结构的选择和概要设计:
为了完成此次课程设计的任务,需要解决的问题有以下方面,
1、为了简单易行的表示皇后在棋盘所处的位置,在此建立一个整型数组X[i]来表示,并且每次用来输出每行的皇后。
2、表示好皇后以后,设计judge 函数来检测第一个皇后的同列和同斜线上有没有其他皇后(程序以行为基础,逐行试探每列和斜线上是否有皇后)。
3、然后设计输出函数print 分别输出正确解法的排列形式和棋盘摆放形式。在输出棋盘的步骤中,设计一个递归函数backtrack 实现棋盘的输出。
4、由于要是此程序使适用于其他的皇后,所以设计了一个design 函数来总体控制皇后的个数,之后依次输出皇后的棋盘形式和皇后的位置。
5、程序流程图
三、详细设计和编码:
首先定义整型数组X[i]表示皇后的位置,i的取值由0到7表示八个皇后。然后定义一个整型变量SUM来统计所有正确解法的个数。并且首先对于这个问题来设置是几皇后才开始以后的问题。
int design
//设置为N皇后问题
int N;
printf 这是一个N皇后问题...\n请输入N ;
scanf %d,N ;
return N;
2、因为每行只能摆放一个皇后,所以在皇后不在同一行的基础上,设计检测函数检测皇后的同列和同斜线上是否存在其他皇后。检测是否同列的时候,定义两个变量i和j表示两个皇后所在的行数,则用X[i]和X[j]表示它们所在的列数,通过验证X[i]和X[j]是否相等确定两个皇后是否处于同一列上。检测同斜线的时候,用到了求绝对值的函数abs 函数,用abs k-i abs x[i]-x[k] || x[i] x[k]是否相等来验证任意两个皇后是否在同
文档评论(0)