在有向圖中, 我們從某個節點和每個轉向處開始, 沿著圖的有向邊走。 如果我們到達的節點是終點 (即它沒有連出的有向邊), 我們停止。
現在, 如果我們最後能走到終點,那麼我們的起始節點是最終安全的。 更具體地說, 存在乙個自然數 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] 中選取。
classsolution:
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儲存問題搞不明白,就比如說什麼時候刪除?怎麼樣才不會導致其中儲存的資料能夠代表當前路徑的數,不會混亂?下面是杰哥幫我修正的一版 基本思路是正確的,面對較...