天天看点

图的单源最短路径:Dijkstra算法实现

本文介绍的是图的非负权值的单源最短路径问题。问题的提出是,对于有权图D,t提供源点v,要找到从v到其他所有点的最短路径,即单源最短路径问题,在本文中,解决这一问题,是普遍比较熟悉的Dijkstra算法。

算法核心思想参见。简而言之,设集合S存放已经求出了最短路径的点。初始状态S中只有一个点v0,之后每求得v0到vn的最短路径,就会更新v0到所有vn邻接的点的一致的最短路径(不一定是最终的最短路径),如此重复,每次会确定v0到一个点的最短路径,确定好的点加入S中,直至所有点进入S结束。在本文中通过visited这一数组来标记相应点是否已经加入S。

以下是代码实现,供参考。其中图的相关部分参见:

对于下图,进行测试:

图的单源最短路径:Dijkstra算法实现
图的单源最短路径:Dijkstra算法实现