建设网站平台的章程,郑州网站设计汉狮网络,网站备案需要多少钱,环评怎么在网站做公示Dijkstra算法用于求无向图或者有向图中起点到各个顶点的最短路径#xff0c;且边的权值需要为非负数下面这个题就可以用该算法求解
743. 网络延迟时间 有 n 个网络节点#xff0c;标记为 1 到 n。 给你一个列表 times#xff0c;表示信号经过 有向 边的传递时间。 times[i]…Dijkstra算法用于求无向图或者有向图中起点到各个顶点的最短路径且边的权值需要为非负数下面这个题就可以用该算法求解
743. 网络延迟时间 有 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) 对都 互不相同即不含重复边
题解
这道题其实就是求到达所有节点的最短时间的最大值也就是先求出起点到各个点的最短路径数组然后求max
使用邻接矩阵来存储图path数组用于记录当前各个节点到起点的最短路径visited数组表示节点是否已经确定最短路径
class Solution {public int networkDelayTime(int[][] times, int n, int k) {int INF Integer.MAX_VALUE / 2;//除以2防止溢出int[][] g new int[n][n];for (int i 0; i n; i)Arrays.fill(g[i], INF);for(int[] e : times) {g[e[0] - 1][e[1] - 1] e[2];}boolean[] visited new boolean[n];int[] path new int[n];Arrays.fill(path, INF);path[k - 1] 0;//起点的最短路径为0for(int i 0; i n; i){int start -1;//当前的起点非最初的起点for(int j 0; j n; j) { //从未确定最短路径的节点中找到值最小的也就是距离起点最近的点作为当前的起点if(!visited[j] (start -1 || path[start] path[j]))start j;}for(int j 0; j n; j) {//枚举所有点, 起点经过start到j近 还是原path到j近path[j] Math.min(path[j], path[start] g[start][j]);}}int ans 0;for(int i 0; i n; i)ans Math.max(ans, path[i]);return ans INF ? -1 : ans;}
}