LeetCode 802 找到最終的安全狀態

2021-09-16 21:20:05 字數 1107 閱讀 7787

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

現在, 如果我們最後能走到終點,那麼我們的起始節點是最終安全的。 更具體地說, 存在乙個自然數 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]

這裡是上圖的示意圖。

看起來很亂,其實要求就是無論選擇從**開始行走最終都能走到終點

平時都是任意有一條能到達就行,這題是要求所有的邊都能到達,挺新鮮

樣例中的0->1,1->3,3->1這樣形成的迴圈,走不到終點,所以這道題就是判斷每個點的所有情況能不能都走到終點

用vis陣列判斷是否被訪問過,safe陣列判斷該結點是否為安全節點

class solution

for(

int i =

0; i < graph[cur]

.size()

;++i)if(

!dfs

(graph[cur]

[i], graph)

)//任意一邊不滿足返回假

return false;

safe[cur]

= true;

//記得把當前結點設為安全

return true;

} public:

vector<

int>

eventualsafenodes

(vector

int>>

&graph)

return ans;}}

;

Leetcode 802 找到最終的安全狀態

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

leetcode802 找到最終的安全狀態

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

802 找到最終的安全狀態

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