Leetcode按题目类型总结(十七)

图论

Posted by Jingming on July 12, 2024

所有代码详见:https://github.com/jingminglake/Leetcode

总体思路

最短路径问题

N表示节点数量,E表示边的数量。

  1. 单源最短路径,且没有负权边 使用Dijkstra。 普通情况下,时间复杂度O(N^2)。 如果图的边数较少,那么使用Dijkstra堆优化版本。时间复杂度O(ElogE) 一般来说,边不算多,直接使用堆优化版。

  2. 单源最短路径,有负权边,但没有负权回路 使用Bellman-Ford。时间复杂度O(N * E)。

如果图的边数比较少,那么使用BellmanFord的队列优化版本SPFA。时间复杂度O(K * N)。一般来说,K比E小。

  1. 多源最短路径 使用Floyd。时间复杂度O(N^3)。

  2. 点到点最短路径 使用BFS。再BFS的基础上,进行A star。A star的时间复杂度不确定,最坏情况下,A * 退化成BFS,时间复杂度O(N^2),

最好情况下,是从起点直接到终点,时间复杂度为 O(dlogd),d 为起点到终点的深度。