dijkstra算法比较容易理解,但是代码有点复杂。
求从源点到其余各点的最短路径的算法的基本思想:
其中,从源点到顶点v的最短路径是所有最短短路径中长度最短者。
路径长度最短的最短路径的特点:
在这条路径上,必定只含一条弧,并且这条弧的权值最小。
下一条路径长度次短的最短路径的特点:
它只可能有两种情况:或者是直接从源点到该点(只含一条弧); 或者是,从源点经过顶点v1,再到达该顶点(由两条弧组成)。
再下一条路径长度次短的最短路径的特点:
它可能有三种情况:或者是,直接从源点到该点(只含一条弧); 或者是,从源点经过顶点v1,再到达该顶点(由两条弧组成);或者是,从源点经过顶点v2,再到达该顶点
其余最短路径的特点:
它或者是直接从源点到该点(只含一条弧); 或者是,从源点经过已求得最短路径的顶点,再到达该顶点
试用范围:
1.dijkstra算法实现单源最短路径查找,路径查找
2.有向图和无向图都可以使用本算法,无向图中的每条边可以看成相反的两条边。
3.用来求最短路的图中不能存在负权边。
具体实现请看算法,下图为简单测试图例
dijkstra算法还有另一种实现,利用队列进行优先级管理,时间复杂度为O((n-2)(n-1)/2),上面dijkstra算法实现的时间复杂度为O((n-2)(n-1)),很明显下面的实现效率是上面的两倍