于基无向图的校园导游系统数据结构课程设计报告毕业设计.docx
《于基无向图的校园导游系统数据结构课程设计报告毕业设计.docx》由会员分享,可在线阅读,更多相关《于基无向图的校园导游系统数据结构课程设计报告毕业设计.docx(26页珍藏版)》请在冰豆网上搜索。
于基无向图的校园导游系统数据结构课程设计报告毕业设计
重庆科技学院
课程设计报告
院(系):
_电气与信息工程学院专业班级:
计科普0902
设计地点(单位)____计算机基础自主学习中心I306___
设计题目:
_________校园导游咨询____________________
重庆科技学院
课程设计任务书
设计题目:
校园导游咨询
学生姓名
课程名称
数据结构课程设计
专业班级
计科2009-02
地点
计算机基础自主学习中心
起止时间
设计内容及要求
基本要求:
(1)设计你的学校的校园平面图,所含景点不少于10个。
以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
(3)为来访客人提供图中任意景点相关信息的查询。
测试数据:
由读者根据实际情况指定。
实现提示:
一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。
顶点和边均含有相关信息。
扩展要求:
(1)提供图中任意景点问路查询,即求任意两个景点之间的所有路径。
(2)扩充道路信息,如道路类别(车道、人行道等)、沿途景色等级,以至可按客人所需分别查询人行路径或车行路径或观景路径等
设计
参数
1、自己编写程序,校园初始数据以文本文件保存,文件格式根据需要自行定义。
对应的地图初始化从文件中读出数据进行初始化。
2、查询的结果应提供屏幕和文件两种方式。
3、有基础的同学尽量实现界面的可视化操作和动态显示。
进度
要求
2011.1.4星期二(上午教师指导,下午学生独立完成)、完成任务的讲解、并接受课程设计任务,选定课程设计的题目
2011.1.5星期三(上午教师指导,下午学生独立完成)、了解任务的算法、并画出算法的程序流程图
2011.1.6星期四(上午教师指导,下午学生独立完成)、对任务的关键技术进行验证、并确定解决办法
2011.1.7星期五(上午教师指导,下午学生独立完成)、编制任务的程序
2011.1.10星期一(上午教师指导,下午学生独立完成)、编制任务的程序
2011.1.11星期二(上午教师指导,下午学生独立完成)、对程序的调试,并试运行。
2011.1.12星期三(上午教师指导,下午学生独立完成)、整理课程设计过程中的各个参数、并进行总结,提出改进意见
2011.1.13星期四(上午教师指导,下午学生独立完成)、编写课程设计报告、准备答辨
2011.1.14星期五(上午答辨)、进行答辨验收工作。
参考资料
1.严蔚敏吴伟民著,数据结构(C语言版),清华大学出版社,2007.4
2.RichardF.GilbergBehrouzA.Forouzan,DataStructuresAPseudocodeApproachwithC,secondedition,Thomson,2005.1
3.李春葆著,数据结构教程,清华大学出版社,2005.1
其它
说明
1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。
2.若填写内容较多可另纸附后。
3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。
教研室主任:
指导教师:
向毅、陈刘奎、熊茜
2010年12月20日
摘要
现代快节奏的生活使得都市人越来越渴望亲近自然,因此外出旅游现在被越来越多的都市人所看中,所以如何快速方便的找到我们想要的旅游景点的信息和最短路径就成了一个很重要的问题。
本设计基于图的结构,创建一个无向图,针对游客的实际需求,将重庆科技学院的景点编号、名称、介绍等信息放入到图的顶点当中并保存在景点文本文件当中,将两个景点的编号和它们之间的距离当作权值也保存到权值文本文件当中,利用迪杰斯特拉算法来求从一个景点到另一个景点的最短距离,利用strcmp();函数来查找景点,并显示出它的信息,从而解决了要查找景点信息和景点之间的最短路径的问题,最后按照显示屏上的提示进行相关的操作。
关键词:
无向图、查找信息、最短距离、校园导游咨询
目录
摘要I
1设计内容和要求1
1.1设计内容1
1.1设计要求1
2概要设计2
2.1程序的模块图2
2.2主函数的概要设计3
2.3查找介绍函数的概要设计3
2.4查找最短路径函数的概要设计3
2.5退出函数的概要设计3
3详细设计4
3.1程序的流程图4
3.2主函数的详细设计5
3.3查找介绍函数的详细设计5
3.4查找最短路径函数的详细设计6
3.5退出函数的详细设计8
3.6数据结构的详细设计8
4软件测试10
4.1菜单的测试10
4.2查找景点简介的测试10
4.3查找两个景点之间的最短距离的测试11
4.4退出的测试11
5软件使用说明12
6致谢13
7参考文献14
8附录15
1设计内容和要求
1.1设计内容
依据课程设计的要求,利用一个无向图的结构,将景点当作图的顶点,将景点之间的距离当作权值来储存,然后根据游客自己的需求,按照显示屏上的提示来进行查找景点介绍,查找两个景点之间的最短距离,退出程序等基本操作。
1.1设计要求
本软件为校园导游咨询系统,根据游客的实际需求而设计,首先创建一个无向图,然后从文件当中读取所有景点的编号、名称、介绍和两点之间的权值,并将它们写入到无向图当中。
功能主要包括查找已知景点的信息,查找从一个景点到另一个景点的最短路径,退出等基本操作。
软件的界面要求使用VC++6.0的运行环境。
软件的数据库包括校园景点的编号、名称、介绍和两个景点之间的距离(权值),首先要定义顶点的数据类型结构体,里面包括景点的编号、名称、介绍,然后定义一个邻接矩阵结构体来储存边的信息,最后定义一个无向图类型的结构体来储存顶点的信息,边的信息,顶点的个数,边的个数。
最后游客按照显示屏上的提示来进行相关的操作。
2概要设计
2.1程序的模块图
本软件的算法依据无向图的操作通过查找函数查找景点的信息,通过迪杰斯特拉函数来查找最短距离,开始时首先从文件当中读取景点的编号、名称、介绍和两个景点之间的距离即权值,然后将其加入到图当中,再调用查找函数查找景点的信息,调用迪杰斯特拉函数来查找最短距离,调用退出函数实现退出功能,其模块图如图2.5所示:
图2.5模块图
2.2主函数的概要设计
基于程序的操作要求,对于主函数的设计首先是显示一个可视化的操作界面提醒游客进行相关的操作和提示游客其可供选择的景点的名称,便于其在后面的操作过程当中能够快速方便的找到其需要查找的景点的名称。
而后就是一个switch();的选择函数,提供查找景点信息,查找两个景点之间的最短距离和退出的相关的选择操作而后进入到每一个操作界面当中,从而实现所需要的功能。
2.3查找介绍函数的概要设计
当游客选择了要查找景点的信息的介绍这一项功能的时候,就会进入到查找的界面,对于查找景点信息就是利用strcmp();函数,当游客输入景点的名称的时候看其是否与文件当中的数据相匹配,如果有则输出它的介绍,如果没有则输出错误的提示提醒游客进行相关的操作来进入到正确的操作过程当中。
2.4查找最短路径函数的概要设计
对于查找最短路径的这一项功能,则是利用迪杰斯特拉函数
(1)假设用带权的邻接矩阵arcs来表示带权的有向图,arcs[i][j]表示弧(vi,vj)上的权值。
若(vi,vj)不存在,则置arcs[i][j]为无穷大。
S为已找到从v出发的最短路径的终点集合,它的初始状态为空集。
那么,从v出发到图上其余各个定点vi可能到达的最短路径长度的初始值为:
D[i]=arcs[v][i];
(2)选择vj,使得D[j]=Min{D[i]|vi∈V–S}vj就是当前求得的一条从v出发的最短路径的终点。
令S=S∪{j};(3)修改从v出发到集合V–S上任意顶点vk可到达的最短路径的长度。
如果D[j]+arcs[j][k](2)、(3)共n–1次,由此求得从v到图上其余各个顶点的最短路径是依路径长度递增的序列。
从而求得了从一个景点到另一个景点的最短路径的问题。
2.5退出函数的概要设计
关于退出函数,则是当游客执行完了他想要进行的操作过后选择退出的功能的时候就调用退出函数exit(0);跳入到退出界面实现退出的功能。
3详细设计
3.1程序的流程图
当我们想要更加实际的了解一个程序的算法过程的时候,我们就要依据程序的流程图来给我们一个比较实际的过程,从流程图当中能够更加清楚整个程序实现的过程是怎样的。
其流程图如图3.1所示:
图3.1流程图
3.2主函数的详细设计
主函数是一个程序的主体,当我们要进行我们所需要的操作的时候我们就要根据主函数中的显示信息和它给我们的相关的提示信息来进行所需要的操作,因此在这次的程序实现的过程当中,首先调用CreateUDN(G);函数创建一个无向图,然后利用一个for();循环语句
for(intk=0;k{
if(k-5==0)
{
cout<cout<<""<<'\t'<}
else
{
cout<<""<<'\t'<}
}将景点的名称打印在显示屏上,最后是一个switch();的选择语句,提示游客根据选择来进入到相关的操作界面实现程序的基本功能。
3.3查找介绍函数的详细设计
当游客选择了要查找景点的信息的介绍这一项功能的时候,程序就会调用DisIntroduction(G);函数进入到查找景点的介绍的界面,当游客输入了需要查找的景点的名称的时候,程序利用for();循环语句来查找是否有这个景点for(inti=0;i{
intm=strcmp(G.vexs[i].name,n1);
if(m==0)
{
v1=i;
count1=count1+1;
}
},找到将它的编号返回,并输出它的介绍,没有找到这输出错误提示,提醒游客进行相关的操作进入正确的操作过程当中。
3.4查找最短路径函数的详细设计
当游客选择了要查找两个景点之间的最短距离这一项功能的时候,程序就会调用DisPath(G);函数进入到查找两个景点之间的最短距离的操作界面当中,当游客输入了两个景点的名称过后,程序会调用strcmp();函数查看是否有这两个景点,如果有则返回他们各自的编号,并调用ShortPath_DIJ(G,v1,v2);函数进入到查找最短路径问题的程序当中。
for(v=0;v{
final[v]=FALSE;//从V出发的最短路径的空集合
D[v]=G.arcs[v0][v];//从V出发到图上其余各个定点v0可能到达的最短路径的初始值
for(w=0;w{
P[v][w]=FALSE;//设空路径
}
if(D[v]{