交通咨询系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1 概述 (2)
1.1 问题描述 (2)
1.2 实现意义 (2)
2 系统分析 (2)
2.1 需求分析 (2)
2.1.1程序的功能 (2)
2.1.2输入输出的要求 (2)
2.2 设计思想 (2)
2.3 设计要求 (3)
3 概要设计 (3)
3.1建立图的存储结构 (3)
3.2 单源最短路径 (3)
3.3 任意一对顶点间最短路径 (4)
4 详细设计 (4)
4.1 用邻接矩阵构造图结构函数CreateMGraph() (4)
4.2 费洛伊德Floyd() (5)
4.3 迪杰斯特拉Dijkstra() (5)
4.4 主要函数流程图及其函数调用 (6)
4.4.1 主要函数流程图 (6)
4.4.2 一个城市到其他城市的路径调用 (7)
4.4.3 任意两个城市之间路径调用 (7)
5 运行与测试 (7)
5.1 有向图存储结构的建立模块的输出 (8)
5.2 单源路径迪杰斯特拉算法模块的输出 (9)
5.3 费洛伊德算法模块的输出 (9)
6 总结与心得 (9)
参考文献 (10)
附录 (10)
1 概述
1.1 问题描述
在交通网络非常发达,交通工具和交通方式不断更新的今天,人们在出差、旅游或做其它出行时,不仅关心节省费用,而且对里程和所需时间等问题也感兴趣。对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。图中顶点表示城市之间的交通关系。这个交通系统可以回答旅客提出的各种问题。比如任意一个城市到其他城市的最短路径,任意两个城市之间的最短路径问题。
1.2 实现意义
便于人们的日常出行,且更好地满足了用户的出行需求。这种最短路径问题的计算方法既简单又便于实现,同时大大提高了计算机的运行速率。
2 系统分析
2.1 需求分析
2.1.1程序的功能
(1)用户自己可以建立不同的路径之间的关系网(2)可以查询某个城市到达其余各城市的最短路径。(3)可以任一查询两个城市之间的最短路径。
2.1.2输入输出的要求
在刚进入主界面后系统提示输入建立交通网络储存结构,输入顶点个数和和边数为整数不能输入其他字符,随后系统提示输入边与边之间的关系分别为i,j,w表示边之间的距离。然后进入查询页面,输入整数1,2,0分别表示你所要查询的功能:一个城市至其他所有城市的最短路径查询、任意两个城市之间的最短路径查询、退出程序。不能输入其他字符否则不能执行操作。在整个操作都是用整数表示城市。
2.2 设计思想
用邻接矩阵来存储交通网络图的信息,运用迪杰斯特拉算法实现图上单源最短路径问题,然后运用费洛伊德算法实现图中任意一对顶点间最短路径问题,这样就会实现交通咨询系统设计的问题。
2.3 设计要求
该交通咨询系统要完成城市网络图的存储,并要实现求任意一个城市顶点到其他城市顶点的最短路径问题,还要实现任意两个城市顶点间的最短路径问题。故设计要分成三部分,一是建立交通网络图的存储结构;二是解决单源路径问题;最后再实现两个城市之间的最短路径问题。
3 概要设计
3.1建立图的存储结构
首先要定义交通图的存储结构。邻接矩阵是表示图形中顶点之间相邻关系的矩阵。设G=(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下定义n阶方阵。
A[i,j]= W i,j 若(v i,v j)或
0或∞,当不满足上述条件时。
一个图的邻接矩阵表示是唯一的。图的邻接矩阵表示,除了需要用一个二维数组存储顶点之间相邻关系的邻接矩阵外,通常还需要使用一个具有n个元素的一维数组来存储顶点信息,其中下表为i的元素存储顶点v的信息。因此,图的邻接矩阵的存储结构定义如下:
#define MVNum 50 //最大顶点数
typedef struct{
VertexType vexs[MvNum];
Adjmatrix arcs[MVNum][MVNum];
}MGraph;
3.2 单源最短路径
单源路径问题:即已知有向图(带权),我们希望找出从某个源点S€V到G中其余各顶点的最短路径。
为了叙述方便,我们把路径上的开始点称为源点,路径的最后一个顶点称为终点。
迪杰斯特拉算法求最短路径的实现思想:设有向图G=(V,E),其中,V={1,2,…,n},cost是表示G的邻接矩阵,cost[i][j]表示有向边的权。若不存在有向边,则cost[i][j]的权为无穷大(这里取值为32767)。设S是一个集合,其中的每个元素表示一个顶点,从源点到这些顶点的最短距离已近求出。设顶点v1为源点,集合S的初态只包含顶点v1。数组dist记录从源点到其他各顶点当前的最短距离,其初值为dist[i]= cost[v1][i],i=1,2,...,n。从S之处的顶点集合V-S中选出一个顶点w,使dist[w]的值最小。于是从源点到达w 只通过s中的顶点,把w加入集合S中,调整dist中记录的源点到V-S中每个顶点v的距离:从原来的dist[v]和dist[w]+cost[w][v]中选择较小的值作为新的dist[v]。重复上述过程,直到S中包含V中其余顶点的最短路径。
最终结果是:S记录了从源点到该顶点存在最短路径的顶点集合,数组dist记录了从源点到V中其余各顶点之间的最短路径,path是最短路径的路径数组,其中path[i]表示从源点到顶点i之间的最短路径的前驱顶点。
迪杰斯特拉算法用自然语言描述如下:
初始化S和D,置空最短路径终点集,置初始的最短路径值;