数据结构-6.5图
前言-数据结构
数据结构是需要反复咀嚼,不管什么时候都可以重中获取现在在开发中的遇到的问题答案。
最短路径(有向网)
- 求两个顶点的最短路径 (解决甲地到乙地的那条路径最短例子)
- 单源点的最短路径(不是求任意两个点的最短路径,那个是顶点对):给定一个出发点(单源点)和一个有向网G = {V,E}求出源点到其他各顶点之间的最短路径
迪杰斯特拉(Dijkstra)算法
-
说明
-
设置并且逐步扩充一个集合S(存放已经求出最短路径的顶点 ),
-
V(所有顶点) - S,其实也就是W
-
直到V(所有顶点) - S为空
-
例子
-
并且是两个点之间的 和权(就是加起来的权) 最小就行 比如:1-2-4-5 = 11 + 12 = 23 < 1-5 = 30
-
最后
-
总结算法
-
设源点V1则S包含V1,W(除V1外的所有顶点) = V(所有顶点集合) - S(V1)
-
如果有弧<Vi,Vj>,两个顶点的距离为权值,否则就是∞
-
选择一个权值最小的顶点Vm加入到S中,每次往S中加入一个顶点,就要修正到各个顶点的距离
-
如果<Vi,Vm> + <Vm,Vj> < <Vi,Vj>,那么就将Vi到下一个顶点的距离改为 Vm到下一个顶点的距离<Vi - Vj+1> -> <Vm - Vj+1>
-
直到W为空,S中包含所有顶点为止