数据结构课程设计之_八皇后问题

上传人:第*** 文档编号:56922796 上传时间:2018-10-17 格式:DOC 页数:21 大小:620KB
返回 下载 相关 举报
数据结构课程设计之_八皇后问题_第1页
第1页 / 共21页
数据结构课程设计之_八皇后问题_第2页
第2页 / 共21页
数据结构课程设计之_八皇后问题_第3页
第3页 / 共21页
数据结构课程设计之_八皇后问题_第4页
第4页 / 共21页
数据结构课程设计之_八皇后问题_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《数据结构课程设计之_八皇后问题》由会员分享,可在线阅读,更多相关《数据结构课程设计之_八皇后问题(21页珍藏版)》请在金锄头文库上搜索。

1、1课 程 设 计 报 告课程名称课程名称 数据结构课程设计数据结构课程设计 课题名称课题名称 八皇后问题演示八皇后问题演示 专专 业业 通信工程通信工程 班班 级级 通信工程通信工程 1081 学学 号号 201013120103 姓姓 名名 刘献文刘献文 指导教师指导教师 田娟秀田娟秀 郭芳郭芳 2012 年年 7 月月 6 日日2湖南工程学院课 程 设 计 任 务 书课程名称 数据结构 课 题 八皇后问题演示 专业班级 通信工程 1081 学生姓名 刘献文 学 号 201013120103 指导老师 田娟秀 郭芳 审 批 任务书下达日期 2012 年 7 月 1 日任务完成日期 2012

2、年 7 月 6 日31 1 设设计计内内容容与与设设计计要要求求1.11.1 设计内容设计内容(4)课题四:八皇后问题演示八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯 1850 年提出:在 88 格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有 76 种方案。1854 年在柏林的象棋杂志上不同的作者发表了 40 种不同的解,后来有人用图论的方法解出 92 种结果。设计思路: 解决 8 皇后时,在安放第 i 行皇后时,需要在列的方向从 1 到 n 试探(j =1, n):首先在

3、第 j 列安放一个皇后,如果在列、主对角线、次对角线方向有其它皇后,则出现攻击,撤消在第 j 列安放的皇后。如果没有出现攻击,在第j 列安放的皇后不动,递归安放第 i+1 行皇后。 对于八皇后问题的实现,如果结合动态的图形演示,则可以使算法的描述更形象、更生动。要求用 Turbo C 或 VC6.0 MFC 实现的八皇后问题的图形程序,能够演示全部的 92 组解。 1.21.2 选题方案:选题方案:所选题目根据学号确定,学号模 6 加 1,即(学号%6+1) 。如你的学号为 9,则所选题目号为:9%6+1(题目 4) 。注意,所有的课题都要求用图形方式演示步骤和结果。同学们可以自己针对数据结构

4、课程中所讲算法来设计一个演示过程的算法。1.31.3 设计要求:设计要求:1.3.11.3.1 课程设计报告规范课程设计报告规范(1)需求分析a.程序的功能。b.输入输出的要求。(2)概要设计a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模4块的功能。b.课题涉及的数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。(3)详细设计a.采用 C 语言定义相关的数据类型。b写出各模块的类 C 码算法。c.画出各函数的调用关系图、主要函数的流程图。(4)调试分析以及设计体会a.测试数据:准备典型的测试数据和测试方案,包括正确的输入及输出结果和含

5、有错误的输入及输出结果。b.程序调试中遇到的问题以及解决问题的方法。c.课程设计过程经验教训、心得体会。(5)使用说明用户使用手册:说明如何使用你编写的程序,详细列出每一步的操作步骤。(6)书写格式a.设计报告要求用 A4 纸打印成册:b.一级标题用 3 号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。(7)附录源程序清单(带注释)1.3.21.3.2 考核方式考核方式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体考核标准包含以下几个部分:(1)平时出

6、勤 (占 10%)(2)系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占 10%)(3)程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占 40%)(4)设计报告(占 30%)注意:不得抄袭他人的报告(或给他人抄袭) ,一旦发现,成绩为零分。(5)独立完成情况(占 10%) 。51.3.31.3.3 课程验收要求课程验收要求(1)运行所设计的系统。(2)回答有关问题。(3)提交课程设计报告。(4)提交软盘(源程序、设计报告文档) 。(5)依内容的创新程度,完善程序情况及对程序讲解情况打分。2 2 进度安排进度安排第 20 周:星期一 8:0012:00 上课 星期二 8:

7、0012:00 上机星期三 14:3018:30 上机星期四 8:0012:00 上机附:课程设计报告装订顺序:封面、任务书、目录、正文、评分表、附件(A4 大小的图纸及程序清单) 。 正文的格式:一级标题用 3 号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为 22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图) ;三、主要功能的实现(至少要有一个主要模块的流程图) ;四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释) 。正文总字数要求在 5000 字以上(不含程序原代码) 。6目录目录一、 需求分析 .71.1 功能要求.71

8、.2 涉及到的知识点 .7二、 概要设计 .72.1 数据结构.72.2 抽象数据类型的定义.82.3 算法流程.8三、 详细设计 .9四、 调试分析及测试 134.1 遇到的问题及解决方法 134.2 程序使用说明 134.3 测试结果13五、 总结与体会 16六、 评分表 17七、 附录(源程序) 187一、一、 需求分析需求分析八皇后问题是一个古老而著名的问题,该问题是十九世纪著名的数学家高斯1850 年提出的,并作了部分解答。高斯在棋盘上放下了八个互不攻击的皇后,他还认为可能有 76 种不同的放法,这就是有名的“八皇后”问题。在国际象棋中,皇后是最有权利的一个棋子;只要别的棋子在它的同

9、一行或同一列或同一斜线(正斜线或反斜线)上时,它就能把对方棋子吃掉。所以高斯提出了一个问题:在 8*8 的格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一列、同一行、或同一条斜线上面,问共有多少种解法。现在我们已经知道八皇后问题有 92 个解答。1.11.1 功能要求功能要求当运行程序时,在屏幕上显示一个比较直观选择界面。进入界面后,就会提示输入字符的输入形式,在八皇后求解程序中,只要你选择输出解的格式,选择 1 则显示为每一列皇后的放置的行数,选择 2 则显示的是以矩阵形式形象的显示皇后的放置位置,选择 0 则退出程序的调试。在调试结果中,的位置也就表示了该皇后应该

10、所在的位置,代表了空位置。1.21.2 涉及到的知识点涉及到的知识点本次课程设计中,用到的主要知识有:递归法的应用,for 语句的灵活运用,数据结构中树知识的灵活运用、栈及数组的掌握.二、二、 概要设计概要设计2.12.1 数据结构数据结构. 1.数组 gEightQueen,存放第 i 行皇后所在的列;2.cont 为存放皇后问题解的个数 ,ment 为皇后问题解矩形形式显示的解的个数;3. 对角线标记为 qj-i 与(j-k),i 为列,j 为行,当(qj=i)或者(abs(qj-i)=abs(j-k),则表示第 i 列皇后是否已在第 j 行存在或 qj-i 与(j-k)为对角线冲突;82

11、.22.2 抽象数据类型的定义抽象数据类型的定义print1() /打印每一行皇后放置的列数的情况print2()/打印以矩阵形式形象的显示皇后的放置位置find()/寻找可以放置皇后的位置place1() 、place2()/递归调用,存入所有每一行皇后所在的列Sleep(i)/缓冲 i/1000s 显示下一个矩阵形式皇后位置void main() /主函数调用2.32.3 算法流程算法流程1. 当 n8 时,便打印出结果。算法流程图如下:YN N三、三、详细设计详细设计/位置标明法打印开始从 n 行开始摆放第 n 个皇后把第 n 个皇后所在的列存入 qk中n8)print1(8);else

12、for(int i=1;i8)print2();elsefor(int i=1;i#include #include const int N=20;int qN;int cont=0,ment=0; void print1(int n)int i;cont+;printf(“第%d 个解:“,cont);for(i=1;i8)print1(8);elsefor(int i=1;i8)print2();elsefor(int i=1;i=8;i+)if(find(i,k)qk=i;place2(k+1);void main()int choice;char ch;printf(“nnt* 欢迎进

13、入八皇后问题 *nn“);ch=y;while(ch=y|ch=Y)printf(“nt 查 询 菜 单n“);printf(“nt*“);printf(“nt* No.1-每一行皇后放置的列数的情况 *“);printf(“nt* No.2-视图矩阵形式显示皇后的位置 *“);printf(“nt* No.0-退 出 *“);printf(“nt*“);printf(“nt 请选择菜单号(No.0-No.2): “);21scanf(“%d“,switch(choice)case 1:printf(“nt 每一行皇后放置的列数的情况nn“);place1(1); /从第 1 个皇后开始放置break;case 2:place2(1); /从第 1 个皇后开始放置break;case 0:ch=n;break;default:printf(“ntt 菜单选择错误,请重新输入!n“);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号