743 網路延遲時間

2021-10-14 10:17:24 字數 1418 閱讀 2103

題目描述:

有 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 發出乙個訊號。需要多久才能使所有節點都收到訊號?如果不能使所有節點收到...