数据结构课程设计—城市道路交通咨询系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
操作说明
双击“城市交通咨询系统.exe”,根据屏幕菜单提示信息,选择任意可选项进行相关操作。根据提示开始输入城市个数以及路径总个数。之后开始建立地图,建立成功后根据菜单界面选择功能。
测试数据
输入测试数据可以对程序进行如下的图的数据进行数据测试。
8
465
6
7
图3-1
下面运行程序检查输入,输出结果。
城市交通系统基本功能
根据以上分析,此系统具备以下功能:
(1)用户进入后的地图创建界面(明确地图中城市的个数以及路径的个数)
(2)地图完善界面(用户自己输入地图中相关路径的起始点以及路径长度)
(3)菜单界面包含两条命令
(4)命令1求一个城市到所有城市的最短距离
(5)命令2求任意的两个城市之间的最短距离
图3-6
为保证结果正确换一个顶点进行:如顶点2到4之间的最短路径以及距离
经过计算可得2到4的最短路径是2=>4,且最短路径为5
图3-7
、结束程序
当用户输入命令0时,结束程序
图3-8
4
通过这次数据结构课程设计,我对《数据结构》这门课程有了更深一步的了解,使我对《数据结构》这门课程掌握以及运用更加灵活。同时也让我发现了自己在这门课上的不足与缺陷,同时也明确了自己在以后的类似课程中的具体学习方法。
(6)回复命令0可推出程序。
数据需求分析
用邻接矩阵建立交通网络模块
VertexType vexs[MVNum];
本程序首先是用户编辑界面,用户根据自己的需求编写地图,从而加入顶点的数组之中,创建的地图用邻接矩阵存储,在从主函数之中进行调用,实现对两个算法的调用。
用户在输入顶点以及边的信息都会存储,在存储成功之后会提示用户存储成功,之后进入到菜单界面,菜单界面提供两种选择口令,分别可以调运Dijkstra和Floyd算法,调用之后输入相应的口令以及要查询的城市编号,算法会根据邻接矩阵存储的地图进行计算,求出最短路径。
while(k!=w)
{
printf("->%d",k);
k=P[k][w];//k为v的后继顶点
}
printf("->%d\n",k);//输出后继顶点
printf(" ======路径长度:%d ===\n",D[v][w]);
}
}
else
if(xz==1)
{
printf(" ===============求单源路径,输入源点v: ");
(1)进入程序后,用户可自己设置城市的个数,以及所有城市之间总共的路径,且分别用顶点和边表示城市与路径
(2)用户根据自己设置的城市个数和路径数,具体输入每个路径的起始点以及每条路径的长度。
(3)进入菜单选择界面
(4)选择2,系统为用户进行提供任意城市的交通查询,即查询任意两个城市之间的一条最短路径。
当要查询某两个城市之间的最短交通路线或者其中一个城市到达其余城市的最短路线时,是一个很繁琐的过程。
根据用户自己的需求,可以自定义地图,此程序就是主要以满足用户自己的环境与实际情况,在难以计算路程时,可将地图输入进行计算,系统将会为用户提供所用路径最短的出现路线,更好的满足用户需求。以下是针对咨询用户说明其最基本的模块功能。
因为自己的不学习,导致这次的课设变得如此的艰难。且因为自己生病住院也更是浪费了很大的时间,对于我自己做课程设计的时间就少的可怜,这也无疑是对我更大的挑战。在临近答辩,我的代码才基本完成,夜以继日的努力也终于是让我完成
5
本次课程设计我遇到了极大的问题,不管是时间方面还是内容方面,自己都显得慌乱过,我能够完成本次课程设计也完全感谢舍友的支持与帮助,在难点上能够对我进行帮助。尤其感谢我的知道老师张老师。感谢她在百忙之中抽出时间来为我解答疑惑,解决问题,她对我此次的课程设计有极大的帮助。再次感谢张老师。课程设计马上结束,同时也谢谢所有的负责老师,谢谢她们这几天对我们的付出,老师辛苦了。
用户进入界面:
(1)、输入城市个数与路径个数
图3-2
(2)输入具体的顶点以及边的个数:
图3-3
地图输入完成,有向图存储结构建立完成。
、具体功能的实现
1、求一个城市到所有城市之间的最短距离。
查询一个顶点到其他顶点的最短路径。如下图。经过手工计算:
1=>1 长度=0,1=>2 长度=8,1=>3 长度=8+6=14,1=>4 长度=8+5=13;和下图完全一致
scanf("%d",&v);
Dijkstra(G,v,n);//调用迪杰斯特拉算法
}
}
printf(" ***************结束求最短路径,再见*****************\n");
}
在以后使用完系统后,可输入口令0,系统会结束一切运算,退出程序。
系统设计功能
菜单界面的主要功能有两个:
(1)、求一个城市到所有城市的最短距离
(2)、求任意的两个城市之间的最短距离
城市交通咨询系统主要有三个模块分别为:
(1)、邻接矩阵的输入与存储构建交通网络
(2)、任意两个城市的最短距离查询
(3)、两个指定城市的最短距离查询
通过此次课程设计,我也明白了对于一个完成的程序而言,想要完成它最重要的代码,最初,也是最为重要的一个部分就是算法思想,以及具体程序功能规划,只有最重要的地基部分完美实现,才可以进行接下来的具体代码编程,以及更多细节上的完美。
通过这次的课程设计我有懂得了好多数据结构的知识,以前上课没有听的,不知道的,这次都有所了解了,像有向图的构建,弗洛伊德算法,迪克斯特拉算法。这些知识从曾经的听说到现在的了解,进了一大步。不但如此,这次的课设也是我感觉到了数据结构的强大与神奇。渐渐的爱上他了。不仅让我了解了数据结构更加深了对它与C语言的联系的理解。
A[i][j]=cost[i][j]
A(k+1)[i][j]=min{Ak[i][j],Ak[i+1][k+1]+Ak[k+1][j]}
弗洛伊德主要算法,若Ak[i][j]已求出,顶点i到顶点k+1的路径长度为Ak[i][k+1],顶点路径长度为Ak[i][j],顶点k+1到顶点j的路径长度为Ak[k+1][j],如果此时Ak[i][k+1]+Ak[k+1][j]< Ak[i][j],则将原来的顶点i到顶点j的路径改为顶点,否则不需要修改顶点i到j的路径。
(5)选择1,系统为用户提供指定城市的交通查询,即查询指定城市到其他城市之间的最短路径。如若输入顶点超出范围显示错误,系统回到菜单重新选择
(6)选择0,系统推出程序。
功能
城市交通咨询系统总体的设计目标:用《数据结构》中的邻接矩阵作数据结构,并结合数据结构有向图的最短路径计算方法,结合相应的数据算法以及c语言的相关知识,编写一个良好的,具有可操作性的,以及能方便用户的使用,包括自定义地图,路径与城市个数可结合实际情况而言,相对操作,简便易懂并无难度。系统在菜单可根据命令进行相应的操作,已满足用户的需求。
printf(" =======输入源点和终点:v,w: ");
scanf("%d,%d",&v,&w);
k=P[v][w];
if(k==0)
printf(" =====顶点 %d 到 %d 无路径!==================\n",v,w);
else
{
printf(" =====从顶点 %d 到 %d 最短路径是 %d ",v,w,v);
图3-4
为保证结果正确换一个顶点进行:如顶点2到其他的距离
经过手工计算:2=>1 长度=6+4=10,2=>2 长度=0,2=>3 长度=6,2=>4 长度=5;和下图完全一致
图3-5
2、求任意的两个城市之间的最短距离
例1到3之间的最短距离,经过计算可得最短距离为1=>2=>3,且路径为14,与下图结果相同。
榆林学院
数据结构课程设计报告
题目城市交通咨询系统
作者杨朝
专业信息管理与信息系统
学号21
指导老师张慧
答辩时间
1
现如今网络非常发达,无论人们出差,旅游或者做其他的出行之时,都会想到道路问题,切不仅仅关心的是交通费用,而且对于里程和所需要的时间等的问题也是同样的关心,在此系统中,完全面向用户,可以用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。且在图中,顶点表示城市,边表示城市之间的交通关系。设计一个交通咨询系统,能够让旅客咨询从任一城市顶点到达另外一个城市之间顶点的最短路径问题(最短里程问题)。
printf("\n");
printf("\n");
printf(" ======请选择:1或2,选择0 退出: ");
scanf(" %d",&xz);
if(xz==2)
{
Floyd(G,n);////调用费洛伊德算法
printf(" =============================================\n");
3.定义一个Floyd函数
void Floyd(MGraph *G,int n);
建立邻接矩阵交通网络:
图2-2
邻接矩阵构造图结构函数
数据类型定义:
typedef struct
{
VertexType vexs[MAX];
Adjmatrix arcs[MAX][MAX];
}MGraph;
void CreateMGraph(MGraph *G,int n,int e)k,… An,其中Ak[i][j]表示从顶点到vi到顶点vj的路径上所经过的顶点编号不大于k的最短路径长度。
主界面的模块概念图如图2-1:

每个模块的具体功能。
采用C语言定义相关数据类型
1.定义一个,用来存储顶点信息。
typedef struct{
VertexType vexs[MAX];
Adjmatrix arcs[MAX][MAX];
}MGraph;
..2.定义一个Dijkstra函数
void Dijkstra(MGr百度文库ph *G,int v,int n);
这次在应用中,我发现了自己的很多不足,在编写城市交通咨询系统的过程中,自己C语言方面的只是掌握太少,很多功能需求只能退而求其次,一次又一次的更改,一次又一次的失败,也终于是在最后也完成了自己的要求,同时我也知道了平时用功学习的重要性。尤其是在日常学习之中,对于单一的只是点也许掌握的还不错,但是自己动手太少,实践经验严重不足,且面临课程设计之时,要求多方面的只是结和编码,对于我而言还是有很大的难度的。如此次对于邻接矩阵的存储于读取,以及最短路径算法的实现,两个及其重要的算法,狄克斯特拉算法和佛洛依德算法,在具体的应用上还是有很多不足。
对系统分析,主要从以下几个方面进行分析。
1.用户需求分析
2.功能需求分析
3.数据需求分析
用户
现如今网络非常发达,无论人们出差,旅游或者做其他的出行之时,都会想到道路问题,切不仅仅关心的是交通费用,而且对于里程和所需要的时间等的问题也是同样的关心,在此系统中,完全面向用户,可以用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。且在图中,顶点表示城市,边表示城市之间的交通关系。设计一个交通咨询系统,能够让旅客咨询从任一城市顶点到达另外一个城市之间顶点的最短路径问题(最短里程问题)。
Ak[i,k+1]Ak[k+1,j]
Ak[i,j]
图2-6
若Ak[i][k+1]+Ak[k+1][ j]<Ak[i][j],修改路径
过程:
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{ if(D[i][k]+D[k][j]<D[i][j])
6
#include<>
#include<>
#define MVNum 100一个城市到所有城市的最短距离========\n");
printf(" =======2.求任意的两个城市之间的最短距离========\n");
printf(" ===============================================\n");
相关文档
最新文档