数据结构课程设计报告(校园导游系统)附有源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程论文(设计)2011-2012学年第2学期
课程名称:数据结构课程设计课程性质:实践课
专业班级:
考核方式:考查
学生姓名:
学号:
学时:1周
教师姓名:
自评分:95分评语及评分
目录
1. 作业内容 (1)
2. 基本思路 (1)
2.1 本校10个景点 (1)
2.2 图的初始化 (2)
2.3 图的遍历 (2)
2.4 求最短路径 (3)
3.系统流程 (4)
3.1 系统的简单说明 (4)
3.2 系统流程图 (5)
4. 系统运行效果图 (5)
4.1 校园导游界面 (5)
4.2 华农校园地图 (6)
4.3 景点的相关信息查询 (6)
4.4 任意两个景点间的最短路径 (7)
4.5 退出校园导游系统 (8)
5.总结 (9)
6.参考文献 (10)
1. 作业内容
设计一个校园导游程序,为来访客人提供各种信息查询任务。基本要求:
(1)设计你所在学校的校园平面图,所含景点不少于10个。以图中顶点表
示校内各景点,存放景点名称、代号、简介信息,以边表示路权,存放路径长度
等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间
的一条最短的简单路径。
2. 基本思路
要完成对整个导游图系统的功能实现,需要对的每一项功能都有清楚的设想
和认识,了解并明确每一项功能的实现需要解决的问题,选择正确并且高效的算
法把问题逐个解决,最终实现程序的正确调试运行。有以下设计思路:(1).结合本校的实际情况,选出10个景点;
(2).人为手工为选出的10个景点赋上相关信息(名称、代号、简介信息、
以及路权等等);
(3).根据选出来的10个景点用邻接矩阵存储校园图。
(4).依照景点的相关信息创建校园图。
(5).把纸质上的内容,利用C++编程语言编写查找景点相关信息的程序。
(6).根据人为赋值的路权,迪杰斯特拉算法计算任意两点之间的最短路径。
(7).综上所诉,用一个主函数把这些板块合成,生产一个菜单界面呈现在
用户面前。
为此,可把系统分为以下几个核心:图的初始化、图的遍历、求最佳路线。2.1 选出本校10个景点
结合华南农业大学实际情况,我选出以下10个景点,从1到10编号:
编号名称编号名称编号名称编号名称1 校史馆 2 红满堂 3 行政楼 4 西园5 东区运动场 6 树木园7 竹园8 新校门9 老校门10 黑山运动场
2.2 图的初始化
由于邻接矩阵特殊的存储方式,它非常便于快速的查找两个顶点之间的边上的权值。所以,图采用带权的邻接矩阵存储。
决定了图的存储方式后,以华南农业大学10个景点的游览地图作为蓝本,把校园地图抽象化成顶点与边构成的图形式,如图2.2所示,途中数字代表线的权值。
2.3 图的遍历
图的遍历是图中最基本的操作。图的遍历是指从图中某一顶点出发,对图中所有顶点访问一次且仅访问一次。导游图需要把每条路径的信息都向游客展示,就需要读取每两个顶点间的路径信息。由于采用了带权的邻接矩阵存储结构进行存储,所以需要针对这一存储结构对路线进行遍历操作。其遍历算法如图2.3所示。
2.4 求最短路径
基于本程序中图的存储是邻接矩阵结构存储的图结构,因而采用适合该存储结构的迪杰斯特拉算法用于解决求最短路径的问题。
迪杰斯特拉提出了一个按路径长度递增的持续产生最短路径的算法,其基本思想是:设置一个集合S 存放已经找到最短路径的顶点,S 的初始状态只包含源点v ,对于v i ∈V-S ,假设从源点v 到v i 的有向边为最短路径。以后每求得一条最短路径v ,…,v k ,就将v k 加入集合S 中,并将路径v ,…,v k ,v i ,与原来的假设相比较,取路径长度较小者为最短路径。重复上述过程,直到集合V 中全部顶点加入到集合S 中。如图2.4所示。
选择图片控件
For 循环语句
(i=0;i<顶点数;i++)
N
For 循环语句
(j=0;j
Y
Y N
Y
开始 结束
如果路径存在
输出该路径信息
N
图2.3 遍历算法示意图
图2.4 图的遍历算法执行效果示意图
辅助数组dist[n]:元素dist[i]表示当前找到的从源点到终点v i 的最短路径的长度。初态为:若从v 到v i 有弧,则dist[i]为弧上的权值;否则置dist[i]为∞。若当前求得的终点为v k ,则根据下式进行迭代:
dist[i]=min{dist[i],dist[k]+arc[k][i]} 1≦i ≦n
辅助数组path[n]:元素path[i]是一个串,表示当前所找到的从源点到终点v i 的最短路径。初态为:若从v 到v i 有弧,则path[i]为“vv k ”,否则置path[i]为空串。
数组s[n]:存放源点和已经生成的终点(即集合S ),初态为只有一个源点v 。 算法的伪代码描述是:
1.初始化数组dist 、path 和s ;
2.while (s 中的元素个数 2.4 将顶点v k 添加到数组s 中; 3.系统流程 3.1 系统的简单说明 1.创建校园图: (1)先手工画好华农的10个景点的草图,再用C++语言输出抽象化的校园地图。 (2)再用C++语言定义节点个数N ,编写函数name( )为景点赋值各类信息 集合S 集合V-S V V k V i