743. 网络延迟时间
生活随笔
收集整理的這篇文章主要介紹了
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
解題思路
使用迪杰斯特拉的最短路徑算法
代碼
class Solution {public int networkDelayTime(int[][] times, int n, int k) {int[][] g=new int[n+1][n+1];int[] dist=new int[n+1];Arrays.fill(dist,-1);for(int i=0;i<=n;i++)Arrays.fill(g[i],-1);for(int[] time:times)g[time[0]][time[1]]=time[2];PriorityQueue<int[]> pq=new PriorityQueue<>((o1,o2) -> o1[0]-o2[0]);pq.add(new int[]{0,k});while(!pq.isEmpty()){int[] cur=pq.poll();if(dist[cur[1]]!=-1) continue;dist[cur[1]]=cur[0]; for(int i=1;i<=n;i++)if(g[cur[1]][i]!=-1){pq.add(new int[]{cur[0]+g[cur[1]][i],i});}}int cnt=0,max=0;for(int i=1;i<=n;i++){if(dist[i]==-1)return -1;max=Math.max(max,dist[i]);}return max;} }總結
以上是生活随笔為你收集整理的743. 网络延迟时间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到黑熊是什么意思
- 下一篇: 连续几天梦到前妻怎么回事