資料結構與演算法 Leetcode刷題 網路延遲時間

2021-10-04 15:41:48 字數 1379 閱讀 6123

有 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.佛洛依德演算法

思路:對於上面的圖,首先要求出從某一點到另一點的最短距離,使用鄰接矩陣來建立圖,map[i][j]表示從點i到點j的距離,從i點到i設定為0,將i到非i點初始化為-1。那麼,從i點到j點最短的距離是什麼呢?是i-j的直線距離,還是需要經過輾轉中間點,距離會更短呢?因此,比較map[i][k] + map[k][j]與map[i][j]的大小就可以得到最短的距離。也就不難給出如下**。

佛洛依德演算法使用的三層迴圈看起來非常冗餘,但是思路相對清晰,是比較容易被理解的一種演算法,也是乙個保命演算法吧。

class

solution

// 3. 將函式中給定的陣列賦值到 v 陣列中

for(

int i =

0; i < times.

size()

; i++

)// 4. 佛洛依德三層迴圈,1~n依次為中間點,遍歷v中所有的元素,求出若點i到點j的最短距離

for(

int k =

1; k < n +

1; k++)}

}}int res =-1

;// 5. v陣列中有乙個距離為-1的,則表示不能使所有的節點都收到訊號

for(

int i =

1; i < n +

1; i++

) res =

max(res, v[k]

[i]);}

return res;}}

;

2.dijkstra演算法 // 待補充

3.spfa演算法 // 待補充

資料結構與演算法分析 leetcode筆記

深度學習知識及資源分享,學習交流,共同進步 leetcode 820 1 題目 給定乙個單詞列表,我們將這個列表編碼成乙個索引字串 s 與乙個索引列表 a。例如,如果這個列表是 time me bell 我們就可以將其表示為 s time bell 和 indexes 0,2,5 對於每乙個索引,我...

資料結構與演算法 Leetcode11

給你 n 個非負整數 a1,a2,an,每個數代表座標中的乙個點 i,ai 在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 i,ai 和 i,0 找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。說明 你不能傾斜容器,且 n 的值至少為 2。輸入 1,8,6,2,5,4,8...

資料結構與演算法 演算法 演算法和資料結構

資料結構與演算法 演算法 好吧,在這裡,您被優秀或優秀的軟體開發人員所隔開。在這種情況下,我會告訴您一開始或至少在我的情況下,並且我知道大多數時候,對於我認識的大多數人,您會覺得自己是乙個無能的人或白痴。基本上,我怎麼可能不理解這一點,然後您會感到沮喪。在這種情況下,我會告訴您情況並不像您想的那麼糟...