Dijkstra算法以及Java实现

(1)Dijkstra算法简介

Dijkstra算法是典型的用来求最短路径的算法,主要用来计算有向图中从起始点到其他所有点的最短路径.该算法采用贪心的思想,每次都查找与起始点距离最近的点,并将结果输出.该算法的主要特点是每次迭代的时候选择的下一个顶点是标记点之外距离源点最近的顶点.一般情况下,该算不能用来解决存在负权边的图。

(2)Dijkstra算法的设计思想

s为源,w[u,v] 为点uv 之间的边的长度,结果保存在 dist[]。
初始化:源的距离dist[s]设为0,其他的点距离设为无穷大,同时把所有的点状态设为没有扩展过。
循环n-1次:
    ① 在没有扩展过的点中取一距离最小的点u,并将其状态设为已扩展。
    ② 对于每个与u相邻的点v,如果dist[u] + w[u,v] < dist[v],那 
    么把dist[v]更新成更短的距离dist[u] + w[u,v]。此时到点v的最短 
    路径上,前一个节点即为u。
    ③结束:此时对于任意的udist[u]就是su的距离。

由于上边的说法太过形式化难以理解,所以给大家写了个小例子,如下:

(3)Dijkstra算法的具体步骤
《Dijkstra算法以及Java实现》
如图所示,假设A点为源节点,目的是要计算从A点到其余所有点的最短路径。具体执行步骤如下表所示:
《Dijkstra算法以及Java实现》
《Dijkstra算法以及Java实现》

(4)Dijkstra算法的结果测试分析

1. 计算核心节点A到有向图其余节点的最短路径信息,按顺序输出。
2. 计算出核心节点A到其余节点的最短距离sum,按顺序输。
3. 计算出核心节点A到其余节点的最短路径sum之和,即sumend,并输出。
4. 遍历有向图中所有节点,按顺序做和A一样的操作。

《Dijkstra算法以及Java实现》

1.分别计算出有向图中所有节点到其余节点的最短距离之和
2.如下图,A到其余所有节点最短距离之和为29,B到其余所有节点最短距离之和为34,等等。
3.将这些最短距离之和进行比较,得出最小值。

《Dijkstra算法以及Java实现》
这就是整个Dijkstra算法的过程,具体代码详见楼主下篇博客,主要讲解代码部分(java实现)。

    原文作者:Dijkstra算法
    原文地址: https://blog.csdn.net/hqm12345qw/article/details/73149601
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞