Leetcode 1129 顏色交替的最短路徑

2021-10-02 23:39:22 字數 2708 閱讀 7362

在乙個有向圖中,節點分別標記為0, 1, ..., n-1。這個圖中的每條邊不是紅色就是藍色,且存在自環或平行邊。

red_edges中的每乙個[i, j]對表示從節點i到節點j的紅色有向邊。類似地,blue_edges中的每乙個[i, j]對表示從節點i到節點j的藍色有向邊。

返回長度為n的陣列answer,其中answer[x]是從節點0到節點x的最短路徑的長度,且路徑上紅色邊和藍色邊交替出現。如果不存在這樣的路徑,那麼answer[x] = -1

示例 1:

輸入:n = 3, red_edges = [[0,1],[1,2]], blue_edges =

輸出:[0,1,-1]

示例 2:

輸入:n = 3, red_edges = [[0,1]], blue_edges = [[2,1]]

輸出:[0,1,-1]

示例 3:

輸入:n = 3, red_edges = [[1,0]], blue_edges = [[2,1]]

輸出:[0,-1,-1]

示例 4:

輸入:n = 3, red_edges = [[0,1]], blue_edges = [[1,2]]

輸出:[0,1,2]

示例 5:

輸入:n = 3, red_edges = [[0,1],[0,2]], blue_edges = [[1,0]]

輸出:[0,1,1]

1 <= n <= 100

red_edges.length <= 400

blue_edges.length <= 400

red_edges[i].length == blue_edges[i].length == 2

0 <= red_edges[i][j], blue_edges[i][j] < n

bfs,從節點0起,每次走一步,這樣保證到達每個節點時路徑是最短的。因為題目要的是紅藍相間,所以「紅藍紅」、「藍紅藍」這兩種分別以「紅」開頭和以「藍」開頭的都要考慮。比較巧妙的方法是利用佇列,使得這兩種依次走一步,正好能求出結果。

class

solution

:def

shortestalternatingpaths

(self, n:

int, red_edges: list[list[

int]

], blue_edges: list[list[

int]])

-> list[

int]

:from collections import defaultdict

red_colloction = defaultdict(

list

) blue_collection = defaultdict(

list

)for point in red_edges:

red_colloction[point[0]

]1])

for point in blue_edges:

blue_collection[point[0]

]1])

red_visit =

blue_visit =

queue =[(

0,0,

"red"),

(0,0

,"blue")]

ans =

[float

("inf"

)for i in

range

(n)]

while queue:

curr, level, color = queue.pop(0)

if(color ==

"red"):

for point in red_colloction[curr]:if

(point not

in red_visit)

: red_visit[point]

=true

(point, level+1,

"blue"))

ans[point]

=min

(ans[point]

, level+1)

else

:for point in blue_collection[curr]:if

(point not

in blue_visit)

: blue_visit[point]

=true

(point, level+1,

"red"))

ans[point]

=min

(ans[point]

, level+1)

ans =[-

1if x==

float

("inf"

)else x for x in ans]

ans[0]

=0return ans

Leetcode 1129 顏色交替的最短路徑

1129.顏色交替的最短路徑 難!題目 在乙個有向圖中,節點分別標記為 0,1,n 1。這個圖中的每條邊不是紅色就是藍色,且存在自環或平行邊。red edges 中的每乙個 i,j 對表示從節點 i 到節點 j 的紅色有向邊。類似地,blue edges 中的每乙個 i,j 對表示從節點 i 到節點...

1129 顏色交替的最短路徑

題目描述 在乙個有向圖中,節點分別標記為 0,1,n 1。這個圖中的每條邊不是紅色就是藍色,且存在自環或平行邊。red edges 中的每乙個 i,j 對表示從節點 i 到節點 j 的紅色有向邊。類似地,blue edges 中的每乙個 i,j 對表示從節點 i 到節點 j 的藍色有向邊。返回長度為...

1129 顏色交替的最短路徑(dfs)

1.問題描述 在乙個有向圖中,節點分別標記為 0,1,n 1。這個圖中的每條邊不是紅色就是藍色,且存在自環或平行邊。red edges 中的每乙個 i,j 對表示從節點 i 到節點 j 的紅色有向邊。類似地,blue edges 中的每乙個 i,j 對表示從節點 i 到節點 j 的藍色有向邊。返回長...