拓展篇-最短路径计算
拓展篇-最短路径计算

拓展篇-最短路径计算

拓展篇- 最短路径计算

最短路径计算是车载导航的基本功能,迪杰斯特拉 (Dijkstra)是典型的单源最短路径算法,用于计算某节点到其他节点的最短路径。

图1是带权有向图,设为G=(V,E),图中的顶点集合为{武大,地大,华工,光谷,图书城},线上所标注的为相邻线段之间车辆行驶时间,即权重。请使用Dijkstra算法求“武大”到各顶点的最短路径。

图1 路网示意图

一、数据文件读取

编写程序读取“路径数据.txt”文件,数据内容和格式说明如表1所示,每1行是1条有向线段,格式为“起点,终点,权值”。

表1 数据内容和格式说明

数据内容 格式说明
武大,地大,6

 

武大,光谷,11

武大,图书城,24

地大,光谷,4

地大,华工,8

光谷,地大,5

光谷,图书城,9

光谷,华工,7

图书城,光谷,11

华工,光谷,9

起点,终点,权重

二、算法实现

算法思想

设G=(V,E)是带权有向图,把顶点集合V分成2组,第1组为已求出最短路径的顶点集合(用S表示),第2组为待定顶点集合(用U表示),按最短路径长度的递增次序依次把U中的顶点加入S中。

算法步骤

(1)初始时,S仅包含1个源点,即S={v},v的距离为0。U包含除v外的其他顶点,即:U={其余顶点},若v与U中顶点u有边,则<u,v>正常有权值,若u不是v的边邻接点,则<u,v>权值为∞。

(2)从U中选取1个距离v最小的顶点k,把k加入到S中(该选定的距离就是v到k的最短路径长度)。

(3)以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。

(4)重复步骤(2)和(3)直到所有顶点都包含在S中。

三、计算结果报告

输出“武大”到其余各顶点的最短路径。

四、参考答案

4.1 测试数据计算结果

—–最短路径计算结果—

武大, 0

地大, 6

光谷, 10

图书城, 19

华工, 14

程序运行界面如图2所示,显示源数据以及最短路径计算结果。

图2 用户界面示例