最短路
// 约定:n - 点数, m - 边数
相关定义
单源最短路:求一个点到其他所有点的最短距离
多源汇最短路1:多次询问 a → b 的最短距离
适用算法
难点
- 建图
- 如何将问题抽象成最短路
- 如何定义点和边
Dijkstra算法
朴素Dijkstra算法
- 存储
稠密图 - 邻接矩阵存储 - 步骤
(1)dist[1] = 0 , dist[i] = +无穷 //s - 当前已确定最短距离的点
(2)for(int i=1;i<=n;i++){
t <- 不在s中的距离最近的点
s <- t //O(1) n次
用t更新其他点的距离 dist[x] > dist[t] + w;
}
堆优化版Dijkstra算法
-
手写堆 n个数
-
优先队列 m个
-时间复杂度:O(mlogm) =O(2mlogn) -
存储:稀疏图 - 邻接表存储
-不需要处理重边
1.13小结
-
《算法基础课》
-
刷题*3
源点:起点 , 汇点:终点 ↩︎