743. Network Delay Time
题目理解:
给出一个有向边权集, 计算遍历全部节点所用的时间, 无法完全遍历则返回-1
思路:
基本是实现了一下Dijkstra
算法而已, 它是解决无负权边单源最短路径的常用算法之一.
Dijkstra算法介绍
- 取
distance
队列中路径最短的结点v
- 取
- 访问
v
的连通边, 更新与v
连通的结点的最短路径与distance
队列
- 访问
- 重复1 2
小结:
算法课的图进行到第二部分, 找出单源图的最短路, 就是学习Dijkstra
算法.
其中优先队列有多种实现方法, 比较简单的就是直接用数组, 每次更新需要O(n)
遍历, 复杂度较高; 或者是用堆, 更新消耗可以降低到O(log(n))
; 或者其他方法.
这里使用堆来实现的优先队列.
总的时间复杂度为 O((|V|+|E|)*log(V))
Submission Detail:
code:
1 | #include <vector> |