q:有 n 個網路節點,標記為 1 到 n。
給定乙個列表 times,表示訊號經過有向邊的傳遞時間。 times[i] = (u, v, w),其中 u 是源節點,v 是目標節點, w 是乙個訊號從源節點傳遞到目標節點的時間。
現在,我們向當前的節點 k 傳送了乙個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點收到訊號,返回 -1。
注意:n 的範圍在 [1, 100] 之間。
k 的範圍在 [1, n] 之間。
times 的長度在 [1, 6000] 之間。
所有的邊 times[i] = (u, v, w) 都有 1 <= u, v <= n 且 0 <= w <= 100。
a:1.dijkstra(迪傑斯特拉)演算法
//遍歷times填充鄰接表
for (int time : times)
//存放k到各個點的最短路徑,最大的為結果
int distence = new int[n + 1];
arrays.fill(distence, -1);
//初始化k到各個節點的距離
for (int i = 1; i <= n; i++)
//自己到自己為0
distence[k] = 0;
//判斷是否找到k到達該點最短路徑
boolean visited = new boolean[n + 1];
arrays.fill(visited, false);
visited[k] = true;
//遍歷除k本身外所有n-1個結點,遍歷n-1次
for (int i = 1; i <= n - 1; i++)
}//標記最近距離節點被找到
visited[minindex] = true;
//根據剛剛找到的最近節點,更新與其他節點的距離
for (int j = 1; j <= n; j++) }}
int maxdis = 0;
//遍歷最大值,如果有節點未被訪問,返回-1
for (int i = 1; i <= n; i++)
maxdis = math.max(maxdis, distence[i]);
}return maxdis;
}2.floyd(弗洛伊德)演算法
//遍歷所有節點,用k做鬆弛
for (int k = 1; k <= n; k++) else }}
}}int maxdis = 0;
//遍歷k到所有節點的最短路徑的最大值
for (int i = 1; i <= n; i++)
maxdis = math.max(maxdis, graph[k][i]);
}return maxdis;
}
網路延遲時間
有 n 個網路節點,標記為 1 到 n。給定乙個列表 times,表示訊號經過有向邊的傳遞時間。times i u,v,w 其中 u 是源節點,v 是目標節點,w 是乙個訊號從源節點傳遞到目標節點的時間。現在,我們從某個節點 k 發出乙個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點收到...
LeetCode 743 網路延遲時間
有 n 個網路節點,標記為 1 到 n。給定乙個列表 times,表示訊號經過有向邊的傳遞時間。times i u,v,w 其中 u 是源節點,v 是目標節點,w 是乙個訊號從源節點傳遞到目標節點的時間。現在,我們向當前的節點 k 傳送了乙個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點...
LeetCode 743 網路延遲時間
有 n 個網路節點,標記為 1 到 n。給定乙個列表 times,表示訊號經過有向邊的傳遞時間。times i u,v,w 其中 u 是源節點,v 是目標節點,w 是乙個訊號從源節點傳遞到目標節點的時間。現在,我們從某個節點 k 發出乙個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點收到...