有 n 個網路節點,標記為 1 到 n。
給定乙個列表 times,表示訊號經過有向邊的傳遞時間。 times[i] = (u, v, w),其中 u 是源節點,v 是目標節點, w 是乙個訊號從源節點傳遞到目標節點的時間。
現在,我們從某個節點 k 發出乙個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點收到訊號,返回 -1。
注意本題的w可以取到0,因此圖初始化時節點值得大小不能為0,可以設為-1。
採用dij演算法解決
from typing import *
import sys
class solution:
def networkdelaytime(self, times: list[list[int]], n: int, k: int) -> int:
graph = [[-1] * (n + 1) for _ in range(n + 1)]
for time in times:
graph[time[0]][time[1]] = time[2]
max_dist = max(self.dij(graph, k, n))
return max_dist if max_dist < sys.maxsize else -1
def dij(self, graph, start, n):
visited = [false] * (n + 1)
dist = [sys.maxsize] * (n + 1)
dist[start] = 0
for _ in range(n):
min_val = sys.maxsize
index = -1
for i in range(1, n + 1):
if not visited[i] and dist[i] < min_val:
min_val = dist[i]
index = i
if -1 == index:
break
visited[index] = true
for i in range(1, n + 1):
if not visited[i] and graph[index][i] != -1:
if dist[i] > (dist[index] + graph[index][i]):
dist[i] = dist[index] + graph[index][i]
return dist[1:]
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 發出乙個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點收到...
LeetCode 743 網路延遲時間 C
有n個網路節點,標記為1到n。給定乙個列表times,表示訊號經過有向邊的傳遞時間。times i u,v,w 其中u是源節點,v是目標節點,w是乙個訊號從源節點傳遞到目標節點的時間。現在,我們向當前的節點k傳送了乙個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點收到訊號,返回 1。注意...