[源码和文档分享]基于Dijkstra算法的最短路径问题求解

摘 要

现实生活中许多数据的处理依赖于Dijkstra算法的应用,通过应用Dijkstra算法使复杂问题更加简单化。算法是以起始点为中心向外层层扩展,直到扩展到终点为止,最终求出最短路径。采用Visual C++ 6.0的控制台工程和MFC工程分别实现了Dijkstra的应用。

关键词:Dijkstra算法;最短路径;MFC工程

1 需求分析

Dijkstra算法是由荷兰计算机科学家艾兹格•迪科斯彻发现的,算法解决的是有向图中最短路径问题。举例来说,如果图中的顶点表示城市,而边上的权重表示著城市间开车行经的距离。Dijkstra 算法可以用来找到两个城市之间的最短路径。

Dijkstra算法的输入包含了一个有权重的有向图G,以及G中的一个来源顶点S。 我们以V表示G中所有顶点的集合。图中的每一个边,都是两个顶点所形成的有序元素对。(u,v)表示从顶点u到v有路径相连。 假设E为所有边的集合,而边的权重则由权重函数w: E→[0,∞]定义。 因此,w(u,v)就是从顶点u到顶点v的非负花费值(cost)。 边的花费可以想像成两个顶点之间的距离。任两点间路径的花费值,就是该路径上所有边的花费值总和。 已知有V中有顶点s及t,Dijkstra算法可以找到s到t的最低花费路径(i.e.最短路径)。这个算法也可以在一个图中,找到从一个顶点s到任何其他顶点的最短路径。

如果将交通网络化成带权图,假如用顶点表示城市,边表示公路段,则由这些顶点和边组成的图可表示沟通个城市的公路图,边的权用以表示两个城市之间的距离或者表示走过这段公路所需要的时间或通过这段路的难易程度等。作为司机和乘汽车的人,自然会关心如下两个问题:

从甲地到乙地是否有公路

从甲地到乙地有几条公路,哪条公路最短或花费的代价最小

这就是我们要讨论的最短路径问题。

迪杰斯特拉提出的一个求最短路径的算法。其基本思想是:按路径长度递增的顺序,逐个产生各最短路径。

首先引进辅助向量dist[],它的每一个分量dist[i]表示已经找到的且从源点v_0到每一个终点v_i的当前最短路径长度。它的初态为:如果从v_0到v_i有弧,则dist[i]为弧的权值;否则dist[i]为∞。其中,长度为dist[j]=min{dist[i]| v_i∈V}的路径是从v_0出发的长度最短的一条最短路径,此路径为(v_0,v_i)。

[源码和文档分享]基于Dijkstra算法的最短路径问题求解_第1张图片

参考文档和完整的文档和源码下载地址:

https://www.write-bug.com/article/1463.html

你可能感兴趣的:([源码和文档分享]基于Dijkstra算法的最短路径问题求解)