802 找到最終的安全狀態

2022-05-13 07:17:04 字數 1074 閱讀 3316

在有向圖中, 我們從某個節點和每個轉向處開始, 沿著圖的有向邊走。 如果我們到達的節點是終點 (即它沒有連出的有向邊), 我們停止。

現在, 如果我們最後能走到終點,那麼我們的起始節點是最終安全的。 更具體地說, 存在乙個自然數 k,  無論選擇從**開始行走, 我們走了不到 k 步後必能停止在乙個終點。

哪些節點最終是安全的? 結果返回乙個有序的陣列。

該有向圖有 n 個節點,標籤為 0, 1, ..., n-1, 其中 n 是 graph 的節點數.  圖以以下的形式給出: graph[i] 是節點 j 的乙個列表,滿足 (i, j) 是圖的一條有向邊。

示例:輸入:graph = [[1,2],[2,3],[5],[0],[5],,]

輸出:[2,4,5,6]

這裡是上圖的示意圖。

graph 節點數不超過 10000.

圖的邊數不會超過 32000.

每個 graph[i] 被排序為不同的整數列表, 在區間 [0, graph.length - 1] 中選取。

class

solution:

def eventualsafenodes(self, graph: list[list[int]]) ->list[int]:

n=len(graph)

vis=[-1]*n

defdfs(i):

if vis[i]!=-1:

return vis[i]==1vis[i]=0

for j in

graph[i]:

ifnot

dfs(j):

return

false

vis[i]=1

return

true

for i in

range(n):

dfs(i)

res=

for i in

range(n):

if vis[i]==1:

return res

LeetCode 802 找到最終的安全狀態

在有向圖中,我們從某個節點和每個轉向處開始,沿著圖的有向邊走。如果我們到達的節點是終點 即它沒有連出的有向邊 我們停止。現在,如果我們最後能走到終點,那麼我們的起始節點是最終安全的。更具體地說,存在乙個自然數 k,無論選擇從 開始行走,我們走了不到 k 步後必能停止在乙個終點。哪些節點最終是安全的?...

Leetcode 802 找到最終的安全狀態

在有向圖中,我們從某個節點和每個轉向處開始,沿著圖的有向邊走。如果我們到達的節點是終點 即它沒有連出的有向邊 我們停止。現在,如果我們最後能走到終點,那麼我們的起始節點是最終安全的。更具體地說,存在乙個自然數 k,無論選擇從 開始行走,我們走了不到 k 步後必能停止在乙個終點。哪些節點最終是安全的?...

leetcode802 找到最終的安全狀態

題目的特點就是dfs,一旦發現這條路徑上有的點重複出現了,那麼這條路徑就被乾掉。因此需要乙個set來儲存已經遍歷過的路徑。一直對於dfs中這種set儲存問題搞不明白,就比如說什麼時候刪除?怎麼樣才不會導致其中儲存的資料能夠代表當前路徑的數,不會混亂?下面是杰哥幫我修正的一版 基本思路是正確的,面對較...