[Data Structure & Algorithm] 带权有向图的最短路径
最短路径 - 从顶点A(源点)到顶点B(终点),权值最小的路径
Dijkstra算法 - 一个源点与其他点之间的最短路径
- 基本思路 - 设 图中的顶点集为V; 最短路径已确定的顶点集为S
1.将源点添加到S中
2.计算出每个顶点的估计距离 - 除了终点在V-S中,其余路径中的点都在S中
3.把最小估计距离所连接的顶点放入S中,此时可能会改变顶点的估计距离
4.重复2、3,直到所有顶点都在S中,得到源点到其他所有顶点的最小路径,即最小的估计距离 - 具体实现
- 引入数组D
- 长度 - 顶点数-1
- D[vj] - 从源点到顶点vj的估计距离
- 初始化数组 - 对于和源点不是直接相连的点vi,D[vi] = 10000(设置一个大于所有权值相加的值)
- 如果估计距离变小,则更新对应的D中的值
- 引入数组D
- 时间复杂度 - O(n2) (邻接表和邻接矩阵相同)
Floyd算法 - 所有点对之间的最短路径
- 基本思路
1.把所有点对之间的直接路径权值保存在矩阵中,没有直接路径的记为∞
2.依次扫描每个点,扫描过的点可以作为中间点,查看增加中间点后, 是否有更小的路径,如果有,更新矩阵中的值 - 时间复杂度 - O(n3)