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: 2
Example 2:
Input: times = [[1,2,1]], n = 2, k = 1
Output: 1
Example 3:
Input: times = [[1,2,1]], n = 2, k = 2
Output: -1
Constraints:
1 <= k <= n <= 100
1 <= times.length <= 6000
times[i].length == 3
1 <= ui, vi <= n
ui != vi
0 <= wi <= 100
All the pairs (ui, vi) are unique. (i.e., no multiple edges.)
Solution:
函数签名如下:
// times 记录边和权重,n 为节点个数(从 1 开始),k 为起点// 计算从 k 发出的信号至少需要多久传遍整幅图intnetworkDelayTime(int[][] times,int n,int k)
让你求所有节点都收到信号的时间,你把所谓的传递时间看做距离,实际上就是问你「从节点 k 到其他所有节点的最短路径中,最长的那条最短路径距离是多少」,说白了就是让你算从节点 k 出发到其他所有节点的最短路径,就是标准的 Dijkstra 算法。