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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

公园导游图课设.docx

1、公园导游图课设课 程 设 计 报 告课程名称 数据结构 课题名称 公园导游图 专 业 计算机科学与技术 班 级 计算机0702 学 号 200703010235 姓 名 蔡 鄂 湘 指导教师 陈淑红 李杰君 李珍辉 2009年 10月 26日湖南工程学院课 程 设 计 任 务 书课程名称 数据结构 课 题 公园导游图 专业班级 计算机0702 学生姓名 蔡鄂湘 学 号 200703010235 指导老师 陈淑红 李杰君 李珍辉 审 批 任务书下达日期 2009 年 10 月 8 日任务完成日期 2009 年 11 月 8 日1设计内容与设计要求1.1设计内容1.1.1 算术24游戏演示由系统随

2、机生成4张扑克牌,用户利用扑克牌的数字及运算符号“+”、“”、“*”、“/”及括号“(”和“)”从键盘上输入一个计算表达式,系统运行后得出计算结果,如果结果等于24,则显示“Congratulation!”,否则显示“Incorrect!”设计思路:从键盘输入中缀表达式,然后将中缀表达式转换为后缀表达式,利用后缀表达式求值。1.1.2 迷宫探索随机生成一个迷宫图,迷宫大小为N*N,N预定义为常数,修改N的值可以改变迷宫的大小。用白色表示可走的路,蓝色表示墙壁不可以通过。系统设计两种运行方式:一种是系统自动探索(用递归方法实现);另一种是由人工操作探索通路。设计思路:程序首先要考虑迷宫的表示,这

3、是一个二维关系图,所以可选择二维数组来存储。数组元素只有两种值0和1,分别代表通路和墙壁。图形的显示可以根据数组元素的值来确定。如果是人工探索,则依据按键来确定探索物的位置坐标,利用循环语句实现。如果是系统自动探索,可采用递归算法实现。1.1.3 二叉树遍历演示演示遍历二叉树的过程,所以首先建立二叉树,并用图形显示出树的形状。建立的过程是采用前序便利的方法来创建,设计两种生成树的方式:一种是系统随机生成,另一种是人工输入。考虑到屏幕界面的有限性,限定二叉树不超过5层,最多26个字符,输入字符小数点“.”代表NULL。初始树为某种颜色的结点,三种情况的遍历采用填充另外一种醒目的颜色,来表示当前遍

4、历的结点,同时显示该结点的访问序号。同时在遍历的过程中在遍历图形的下方显示出遍历序列。1.1.4 数组应用按照行优先顺序将用户随机输入的数据建成2维数组并以图形方式逐步显示出来,然后再按照列优先顺序以图形方式逐步输出相应数组。1.1.5 拓扑排序演示演示拓扑排序的过程。按照有向图给出的次序关系,将图中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系。要求每输出一个顶点后就演示从图中删去此顶点以及所有以它为尾的弧。1.1.6 图的遍历演示图的深度优先, 广度优先遍历过程,并输出原图结构及遍历结果。要求图的结点数不能少于6个。可以由系统随机生成图,也可以由用户

5、手动输入图。报告中要写出画图的思路;画出图的结构,有兴趣的同学可以进一步改进图的效果。1.1.7 八皇后问题演示在8*8的棋盘上摆放8个皇后,使他们不在同一条对角线上和不在一行和列上。 解决8皇后时,在安放第i行皇后时,需要在列的方向从1到n试探(j =1, n):首先在第j列安放一个皇后,如果在列、主对角线、次对角线方向有其它皇后,则出现攻击,撤消在第j列安放的皇后。如果没有出现攻击,在第j列安放的皇后不动,递归安放第i+1行皇后。 该课题要求求解可能的方案及方案数并逐步演示摆放皇后的过程。1.1.8 双链表创建演示建立一个递增有序的双链表。功能是随机生成8个结点数据,每生成一个结点则申请空

6、间得到一个指针,将数据存放到指针所指的数据域中,然后将结点插入到已经排好序的双链表中。所以第一步工作是判断新结点的插入位置,第二不演示插入过程中指针的变化,第三步显示插入后的链表结果。1.1.9 公园导游图给出一张某公园的导游图,游客通过终端询问可知:从某一景点到另一景点的最短路径。游客从公园大门进入,选一条最佳路线,使游客可以不重复地游览各景点,最后回到出口(出口就在入口旁边)。要求用图示展示最佳路径。1.2 选题方案:所选题目根据学号确定,学号模9加1,即(学号%9+1)。如你的学号为12,则所选题目号为:12%9+1(题目4)。注意,所有的课题都要求用图形方式演示步骤和结果。有兴趣的同学

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

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

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

10、0016:00 上课 星期五 18:0022:00 上机第 8 周:星期六 14:0018:00 上机 星期日 8:0012:00 上机 星期日 18:0022:00 上课第 9 周:星期六 8:0012:00 上机 星期日 14:0018:00 上机2.2 计算机0703班: 第 7 周:星期一 8:0012:00 上课 星期一 14:0016:00 上课 星期六 8:0012:00 上机 星期日 14:0018:00 上机第 8 周:星期六 8:0012:00 上机 星期日 14:0018:00 上机第 9 周:星期六 14:0018:00 上机 星期日 18:0022:00 上机。 目

11、录1需求分析11.1课程设计内容和要求11.2 输入输出的要求 12概要设计 22.1 主要程序功能模22.2 课题涉及的数据结构和数据库结构23详细设计 43.1 C语言定义的相关数据类型 43.2 各模块的类C码算法43.3 各函数的调用关系图、主要函数的流程图 74调试分析以及设计体会114.1测试数据114.2程序调试中遇到的问题以及解决问题的方法154.3经验教训、心得体会 155使用说明166附录171 需求分析1.1课程设计内容和要求。程序要能够显示出地图,要能够查找出地图中任意两点间的最短距离,以及不重复遍历全图的最短路径,并且在查找及遍历的每个过程都在图中显示出暂时的结果,以

12、便演示整过过程。1.2输入输出的要求。程序执行要求有描述地图的两个文件,并放到相应位置。其中一个文件存放有描述地图各个景点之间距离的矩阵,另一个文件存有地图中各景点在显示器上显示的位置。两个地图文件不允许有错误。执行相应功能前要求先选择。查找任意两点间的最短距离,要求输入要查找最短路径的两点。在运行各个小过程后要求输出暂时结果。2 概要设计2.1 程序模块程序共有主模块、查找两点最短路径并输出具体过程、寻找不重复遍历全图图路径并输出遍历过程、三个模块。主模块包含、载入地图、显示地图、功能选择与调用三部分。查找两点最短路径并输出具体过程模块中的输出具体过程为显示地图模块模块结构如图:图2.12.

13、2 课题涉及的数据结构和数据库结构程序主要用了图和栈两种数据结构,采用矩阵来保存图形结构的地图,用栈保存遍历时经过的结点用以遍历的回溯,以及存储最终路径。图的抽象数据类型:ADT Graph数据对象:D=a1|1in,n0数据关系:R=|ai,ajD,1jn,1jn,其中每个元素可以有零个或多个前驱,可以有零个或多个后继基本运算:LoadImg(*g):从相应文件中载入图数据初始化图g。OutputImg(*g)把图输出到屏幕。bestpath()不重复遍历图。Floyed()计算图中所有点的两两最短路径。 栈的抽象数据类型:ADT List数据对象:D=ai|1in,n0,数据关系:R=|a

14、i,ai+1D,i=1,n-1基本运算:push(*s,e):进栈:将元素e查到栈s中作为栈顶元素。 pop(*s,*e):出栈:从栈s中退出栈顶元素,并将其值赋予e。copsta(*s1, *s):把栈s中的内容复制到栈s1。3 详细设计3.1采用C语言定义相关的数据类型。图的定义:typedef struct int edgesMAXMAX; int n; /* n 顶点数*/int e; /* e 边数 */MGraph;栈的定义:typedef struct int bodyMAX; int top;Stack;3.2写出各模块的类C码算法。3.2.1读取地图:把保存在文件中的地图数据

15、载入到程序中相应的数据结构,图结构体g及顶点位置数组vl2中。void LoadImg(int vl2,MGraph *g) fp=fopen(g.g2,r); fscanf(fp, %d,&(g-n); for(i=0;in; i+) fscanf(fp, %d%d,&vli0,&vli1); fclose(fp); fp=fopen(g.g1,r); for(i=0,g-e=0; in; i+) for(j=0; jn; j+) fscanf(fp, %d,&(g-edgesij);fclose(fp);3.2.2 显示地图:把地图以图形方式输出到显示器。void OutputImg(in

16、t vl2,MGraph *g) for(i=0,g-e=0; in; i+) for(j=0; jn; j+) if(g-edgesij!=INF & ie+;画两点间路径; for(i=0;in; i+) 画景点;3.2.3 不重复遍历全图的最短路径:寻找从起点开始不重复走完所有景点的路径,如果该路径不存在,将提示。如果存在将会最终找出符合要求的最短路径。Step1: if(没遍历完)if(向前有一景点没访问过)往下走;else 回溯到上一景点点(原景点之后景点变为没访问过);if( 遍历到起点 且 访问其以后景点必然与以前的试探路径相同) /说明 路径不再存在;若 以前找到过遍历路径则输

17、出最佳结果 结束;else 到Step1 开始下一步搜索;else 若比以前有的结果更好,则输出结果并继续试探更好的遍历方法; 3.2.4 两点间最短路径:采用弗洛伊德算法,求出每点间的最短路径,并在计算过程中输出用户所求两点间的暂时计算出的最短路径。void Floyed(MGraph *g, int AMAX, int pathMAX,int vl2) for (i=0;in;i+) /*置初值*/ for (j=0;jn;j+) Aij=g-edgesij; pathij=-1; 输入两景点; for (k=0;kn;k+) for (i=0;in;i+) for (j=0;jn;j+)

18、 if(Aik!=INF & Akj!=INF & Aij(Aik+Akj) Aij=Aik+Akj; pathij=k; 输出0到k号顶点被考虑作为中间节点时两景点的最短路径图;3.3各函数的调用关系图、主要函数的流程图。3.3.1函数调用关系图: 图3.1 函数调用关系图3.3.2主函数流程图:图3.2 主函数流程图3.3.3查找两点最短路径函数Floyed()流程图:图3.3查找两点最短路径函数流程图3.3.4不重复遍历景点函数bestpath()图3.4 不重复遍历景点函数4 调试分析以及设计体会4.1测试数据: 程序中的测试数据主要为景点地图相关的数据,景点个数、景点间距离、显示景点

19、时在屏幕上的位置,由于数据量比较大,所以把数据保存到文件,在程序运行时从文件中输入数据。从文件中输入景点个数和在景点屏幕上的显示位置数据,每对坐标按顺序对应相应编号的景点:10 (景点个数为10)300 100 200 150 300 150 400 150 250 200 350 200 450 200 200 250 300 250 400 250 从文件中输入以下的景点间距离数据到程序,32767表示两景点间没有路径,数据的行数和列数分别对应第一个顶点和第二个顶点的编号。相对于主对角线对称的两点表示的是同一条路径,所以必须相等。0 50 20 32 32767 32767 32767 3

20、2767 32767 3276750 0 32767 32767 10 32767 32767 43 32767 3276720 32767 0 15 32767 32767 32767 32767 32767 3276732 32767 15 0 32767 3 1 32767 32767 3276732767 10 3 32767 0 32 32767 6 9 3276732767 32767 3 3 32 0 36 32767 54 1632767 32767 32767 1 32767 36 0 32767 32767 2432767 43 32767 32767 6 32767 32

21、767 0 18 3276732767 32767 32767 32767 9 54 32767 18 0 2132767 32767 32767 32767 32767 16 24 32767 21 0在键盘输入数据主要为功能选择类输入,和查找两景点间距离数时输入的景点号码下面图中调试用的景点号为0、9。运行后得到如下结果:图4.1:选择功能界面图4.2: 遍历图运行中图4.3: 遍历图完成选择2 后系统提示输入两点:图4.4: 选择2 后系统提示输入两点图图4.5: 选择2 输入0、9后运行截图 图4.6: 选择2 输入0 9后运行完成截图4.2程序调试中遇到的问题以及解决问题的方法。程序

22、调试中遇到了各种各样的问题,大部分是输入错误以及局部的逻辑混乱,或者某些地方考虑不周造成。输入错误主要有等于写成赋值、缺少分号、符号-写成了减号-以及字符忘加引号等。输入错误在编译时一般可以排除,编译时还没排除的错误以及逻辑错误一般要在调试运行时排除。排除错误主要是通过在程序中加入大量输出函数,输出运行状态,然后根据输出结果定位出错位置,找出出错原因并解决问题。但在中途还遇到过一些奇怪的问题,如函数执行完毕之后不能正常跳出。我实在是找不到错在哪里,后来我改变了函数的结构,及程序的组织方式,问题终于没有了。我自己觉得应该是对语言或编译环境的细节还了解得不够造成了这类问题不能解决。4.3经验教训、

23、心得体会。两周的课程设计中,碰到过许多问题。首先,上课时听的理论知识,各种算法似乎很容易理解,但是在真正的运用过程中,并不能把理论知道很好的和实践结合起来。在平时做实验时,尤其是这次课程设计,总感到有些无从下手。因此,在学知识的过程中,一定要多动手、动脑,将所学的知识熟练掌握,自如运用。其次,通过这次课程设计,对自己的逻辑思维能力是一个很大的锻炼,加强了我们的系统思考问题的能力,在编程方面,我们开始从整体的角度来考虑问题了,而不再像以前一样的,没有一个总体的概念。也就是因为这种习惯,使自己在课程设计过程中浪费了不少的时间。 程序设计是一个毅力的考验过程。有时候往往只是一个小小的错误,却要费很多

24、的时间来解决。在这个过程不能过于急躁,并且要很有耐心才行程序需要反复调试,其过程很可能相当令人头疼,有时花很长时间设计出来还是需要重做,那时心中未免有点灰心,有时还特别想放弃,此时更加需要静下心,查找原因。在课程设计中,感谢老师的耐心指导,让我能能能够顺利写出程序并把程序更快的调试正确,我从中也学到了许多新的方法和知识。感谢在做课程设计帮助自己的一些同学,是他们给我的意见和建议,让我的程序能够更加完善。5.使用说明把地图文件放到与程序文件相同的目录,然后运行程序,程序会提供地图的图形显示,以及两个供选择的功能,选择相应编号或即可完成对应功能,并在图上看到其完成过程。6.附录#include s

25、tdio.h#include Conio.h#include graphics.h#include Dos.h#define closegr closegraph#define MAX 12#define INF 32767/*定义图结构*/typedef struct int edgesMAXMAX; int n,e; /* n 顶点数 e 边数*/MGraph;/*定义栈结构*/typedef struct int bodyMAX; int top;Stack;int push(Stack *s,int n) if(s-top=MAX-1)return 0; s-top+; s-bodys

26、-top=n; return 1;int pop(Stack *s,int *n) if(s-top=-1) return 0; *n=s-bodys-top; s-top-; return 1;void copsta(Stack *s1, Stack *s) int i; s1-top=s-top; for(i=0;itop;i+) s1-bodyi = s-bodyi; void Initgr(void) /* BGI初始化*/ int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果*/ registerbgidriver(EGAVGA_driver); initgraph(&gd, &gm, ); /*从文件中读取图形到程序*/void LoadImg(int vl2,MGraph *g) /*vl 顶点在显示器中显示时的坐标值 */FILE *fp; int i,j; fp=fopen(g.g2,r); fscanf(fp, %d,&(g-n); for(i=0;in; i+) fscanf(fp, %d%d,&vli0,&vli1); fclose(fp); fp=fopen(g.g1,r); for(i=0,g-e=0; i

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

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