您的位置:首页 > 科技 > IT业 > 南京开发门户网站的公司_旅游网站设计风格_关键词排名优化公司_创建自己的网站怎么弄

南京开发门户网站的公司_旅游网站设计风格_关键词排名优化公司_创建自己的网站怎么弄

2024/12/23 4:20:04 来源:https://blog.csdn.net/qq_40878316/article/details/144024789  浏览:    关键词:南京开发门户网站的公司_旅游网站设计风格_关键词排名优化公司_创建自己的网站怎么弄
南京开发门户网站的公司_旅游网站设计风格_关键词排名优化公司_创建自己的网站怎么弄

n 个网络节点,标记为 1 到 n

给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。

现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1

示例 1:

输入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
输出:2

示例 2:

输入:times = [[1,2,1]], n = 2, k = 1
输出:1

示例 3:

输入:times = [[1,2,1]], n = 2, k = 2
输出:-1

提示:

  • 1 <= k <= n <= 100
  • 1 <= times.length <= 6000
  • times[i].length == 3
  • 1 <= ui, vi <= n
  • ui != vi
  • 0 <= wi <= 100
  • 所有 (ui, vi) 对都 互不相同(即,不含重复边)

我的解答:

class Solution {public int networkDelayTime(int[][] times, int n, int k) {// 即n * (n - 1) * 100,所有节点互相发信号的所需的最长时间final int TIME_OUT =1_000_000; // 用于存放所有节点链接可能的所需时间,如节点1到节点2的所需时间为circuit[0][1] = w0int[][] circuit = new int[n][n]; for(int i = 0; i < n; i++){// 初始化所有节点到其他节点的所需时间Arrays.fill(circuit[i], TIME_OUT);}for(int[] time : times){// 给所有连通的节点赋予其真实所需时间circuit[ time[0] - 1 ][ time[1] - 1 ] = time[2];}// 记录到达该目标节点最短所需时间int[] dist = new int[n];// 初始化节点,默认无法到达,时间超时Arrays.fill(dist,TIME_OUT);// 起点不消耗时间dist[k - 1] = 0;boolean[] flag = new boolean[n];for(int i = 0; i < n; i++){int x = -1;for(int y = 0; y < n; y++){// 找到当前未被标识的达到所需时间最短的目标节点,使其作为当前源节点if(!flag[y] && (x == -1 || dist[y] < dist[x])){x = y;}}// 标识已确认源节点flag[x] = true;for(int y = 0; y < n; y++){// 遍历源节点到其他节点的时间                dist[y] = Math.min(dist[y], dist[x] + circuit[x][y] );}}// 走到耗时最长的节点所需的时间,能同时走完其他节点int res = Arrays.stream(dist).max().getAsInt();// 如果该时长为超时时长,则说明有节点不可到达return res == TIME_OUT ? -1:res;}
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com