交通咨询系统设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)或€E(G);

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,置空最短路径终点集,置初始的最短路径值;

相关文档
最新文档