陈越-数据结构
分类
单源:固定源点到其他任意源点求最短路径
多源:任意两顶点最短路径
有向or无向,有权or无权
按照递增顺序寻找最短路
单源无权图
BFS加强版
path还需要反序->堆栈!
PS:访问点->队列orvisited,访问边->求邻接点
单源有权图
*不可有负值圈
Dijkstra算法(贪心)
- 思想
- 找离源点距离最短的v
- 更新v邻接点的距离(加了v后是否能使他的邻接点距离更短?保留短的)
- 实操
- 两个变量同无权:dist和path
- 初始化dist正无穷(保证第一次一定被更新)
- 参考
动画示例
多源最短路径
- 简单粗暴
- 每个顶点都调用上述单源最短路径算法
- 稀疏图合适
- Floyd算法
- 稠密图
- 邻接矩阵存储结果,path存储路径(也是二维数组)
- 原理
- 对每一个顶点v,遍历所有顶点对,更新路径(v插入顶点对后这俩点距离是否短了?)->复杂度 v 3 v^3 v3
- 只访问点而不管边?