題目描述:
有 n 個網路節點,標記為 1 到 n。
給定乙個列表 times,表示訊號經過有向邊的傳遞時間。 times[i] = (u, v, w),其中 u 是源節點,v 是目標節點, w 是乙個訊號從源節點傳遞到目標節點的時間。
現在,我們從某個節點 k 發出乙個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點收到訊號,返回 -1。
示例:
輸入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2
輸出:2
注意:
n 的範圍在 [1, 100] 之間。
k 的範圍在 [1, n] 之間。
times 的長度在 [1, 6000] 之間。
所有的邊 times[i] = (u, v, w) 都有 1 <= u, v <= n 且 0 <= w <= 100。
方法1:
(1)先建立有向圖,結點之間的傳遞時間相等於距離或權重,計算從某個結點出發,是否能夠到達所有的結點,若能,則最全的結點的最近距離是多少;
(2)使用廣度優先搜尋,並使用陣列distance儲存從起始點到當前點的最近距離,廣度優先搜尋的過程中,若到達當前某個結點的距離小於當前距離,則進一步跟新該點的距離,並重新將該點壓入到佇列中;
(3)則distance陣列元素初始值為int_max;
(4)廣度優先搜尋結束後,判斷distance陣列中是否還存在int_max的元素,若存在,則說明從起點不能到達該點,故可以直接返回-1,否則,找出distance中的最大值,即為結果;
class
solution);
}//儲存從起始點到各個結點的最短距離
vector<
int>
distance
(n+1
,int_max)
; queue<
int> q;
q.push
(k);
//初始化佇列,既起始點
distance[k]=0
;//廣度優先搜尋
while
(!q.
empty()
)}}int res=0;
//找出能到達的結點的最長距離
//遍歷各個結點
for(
int i=
1;i<=n;
++i)
res=
max(res,distance[i]);
}return res;}}
;
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 網路延遲時間
有 n 個網路節點,標記為 1 到 n。給定乙個列表 times,表示訊號經過有向邊的傳遞時間。times i u,v,w 其中 u 是源節點,v 是目標節點,w 是乙個訊號從源節點傳遞到目標節點的時間。現在,我們從某個節點 k 發出乙個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點收到...