LeetCode 743 網路延遲問題

2021-10-24 17:40:31 字數 1255 閱讀 1744

有 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。注意...