408 复习笔记:最短路径的两个算法
408
最短路径
两个算法各自解决什么
- Dijkstra:单源、边权非负。每次选未确定的最短距离结点,松弛它的邻居。
- Floyd:多源、允许负权边(但不能有负权回路)。本质是三重循环的动态规划。
复杂度对照
| 算法 | 时间复杂度 | 适合的图 |
|---|---|---|
| Dijkstra(邻接矩阵) | O(n²) | 稠密图 |
| Dijkstra(堆优化) | O(m log n) | 稀疏图 |
| Floyd | O(n³) | 求任意两点 |
手算提醒
- Dijkstra 每轮只确定一个结点,写出每轮的 dist 表能拿过程分
- Floyd 的 k 必须在最外层循环——写反了结果就是错的
- 负权边出现时,Dijkstra 直接失效,不要试图「修正」它
一句话记忆
非负单源用 Dijkstra,多源随便用 Floyd,有负权回路的图最短路径没有定义。