最短路径Shortest paths
寻找路径边权之和最小的路线。先区分单源与所有顶点对,再判断是否存在负权边或会影响目标的负环。
怎样选择#
- V 为顶点数,E 为边数。无权图或各边权相同且为正时,BFS 已能求单源最短路径。
- 负权边不等于负环。若起点能到达负环、且负环能到达终点,这对起终点没有有限的最短距离;其他顶点对不一定受影响。
- Dijkstra 与 Bellman–Ford 解决单源问题;Floyd–Warshall 一次计算全部顶点对,不能只按复杂度大小直接比较。
算法对照#
| 具体算法 | 问题与前提 | 时间复杂度 | 辅助空间 | 选择与取舍 |
|---|---|---|---|---|
| Dijkstra | 单源;边权非负 | 索引二叉堆 | 索引堆 ;重复入堆版可 | 确定最近的未处理顶点后不再回退;一般负权边会破坏这一保证。 |
| Bellman–Ford | 单源;允许负权边 | ,保存距离与前驱 | 反复松弛边,并检测从源点可达的负环;成本通常高于非负边权上的 Dijkstra。 | |
| Floyd–Warshall | 所有顶点对;允许负权边 | 时间 ,空间 | ,保存全对距离;路径恢复再用 | 适合顶点数适中的图;检查负对角项后,还需区分哪些顶点对受负环影响。 |
左右滑动查看完整对照。点击算法名称,查看原理、约束和实现。