最短路径问题
最短路径: 边上的权重就是距离。
最便宜: 权重是价格。
最快的路径: 通过结点最少
最短路径问题的抽象
在网络中,求两个不通顶点之间的所有路径中,边的权值之和最小的那一条路径
这条路径就是两点之间的最短路径
第一个顶点为源点
最后一个顶点为终点
问题分类
- 单源最短路径问题:从某固定源点出发,求其到所有其他顶点的最短路径。
- (有向)无权图
- (有向)有权图
- 多源最短路径问题:求任意两顶点间的最短路径。
单源最短路径在每个节点上用一遍就是多源最短路径。
单源无权图 最短路径问题
思路是:按照递增(非递减)的顺序找到到各个顶点的最短路。
单源有权图 最短路径问题
无权图可以看成是特殊的有全图,只不过每条权重都是1
Dijkstra算法
- 令S={源点s+已经确定了最短路径的顶点vi} 顶点的集合
- 对任一未收录的顶点V,定义dist[v]为s到v的最短路径长度,但该路径仅经过S中的顶点,即路径{s->(vi ε S)->v }的最小长度。
- 若路径是按照递增的顺序生成的,则
- 真正的最短路必须只经过S中的顶点(为什么?)
- 每次从未收录的顶点中选一个dist最小的收录(贪心)
- 增加一个V进入S,可能影响另外一个W的dist值。
时间: 2024-08-07 07:15:08