743. Network Delay Time (M)
https://leetcode.com/problems/network-delay-time/
You are given a network of n nodes, labeled from 1 to n. You are also given times, a list of travel times as directed edges times[i] = (ui, vi, wi), where ui is the source node, vi is the target node, and wi is the time it takes for a signal to travel from source to target.
We will send a signal from a given node k. Return the time it takes for all the n nodes to receive the signal. If it is impossible for all the n nodes to receive the signal, return -1.
Example 1:

Input: times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
Output: 2Example 2:
Input: times = [[1,2,1]], n = 2, k = 1
Output: 1Example 3:
Input: times = [[1,2,1]], n = 2, k = 2
Output: -1
Constraints:
1 <= k <= n <= 1001 <= times.length <= 6000times[i].length == 31 <= ui, vi <= nui != vi0 <= wi <= 100All the pairs
(ui, vi)are unique. (i.e., no multiple edges.)
Solution:
函数签名如下:
让你求所有节点都收到信号的时间,你把所谓的传递时间看做距离,实际上就是问你「从节点 k 到其他所有节点的最短路径中,最长的那条最短路径距离是多少」,说白了就是让你算从节点 k 出发到其他所有节点的最短路径,就是标准的 Dijkstra 算法。
在用 Dijkstra 之前,别忘了要满足一些条件,加权有向图,没有负权重边,OK,可以用 Dijkstra 算法计算最短路径。
根据我们之前 Dijkstra 算法的框架,我们可以写出下面代码:
上述代码首先利用题目输入的数据转化成邻接表表示一幅图,接下来我们可以直接套用 Dijkstra 算法的框架:
你对比之前说的代码框架,只要稍稍修改,就可以把这道题目解决了。
Last updated
Was this helpful?