有 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。
解題思路:
我們使用 dijkstra's 演算法找到從源節點到所有節點的最短路徑。
dijkstra's 演算法是每次擴充套件乙個距離最短的點,更新與其相鄰點的距離。
dijkstra's 演算法基本思想:
通過dijkstra計算圖g中的最短路徑時,需要指定起點s(即從頂點s開始計算)。
此外,引進兩個集合s和u。s的作用是記錄已求出最短路徑的頂點(以及相應的最短路徑長度),而u則是記錄還未求出最短路徑的頂點(以及該頂點到起點s的距離)。
初始時,s中只有起點s;u中是除s之外的頂點,並且u中頂點的路徑是」起點s到該頂點的路徑」。然後,從u中找出路徑最短的頂點,並將其加入到s中;接著,更新u中的頂點和頂點對應的路徑。 然後,再從u中找出路徑最短的頂點,並將其加入到s中;接著,更新u中的頂點和頂點對應的路徑。 … 重複該操作,直到遍歷完所有頂點。
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。注意...