Find Eventual Safe States LeetCode solution in C++

1
class Solution {
2
public:
3
vector<int> eventualSafeNodes(vector<vector<int>> &graph) {
4
int n = graph.size();
5
vector<bool> vis(n, false), curr_vis(n, false), safe(n, true);
6

7
for (int i = 0; i < n; i++)
8
if (!vis[i]) dfs(i, vis, curr_vis, safe, graph);
9

10
vector<int> ans;
11
for (int i = 0; i < n; i++)
12
if (safe[i]) ans.push_back(i);
13

14
return ans;
15
}
16

17
bool dfs(int i, vector<bool> &vis, vector<bool> &curr_vis, vector<bool> &safe,
18
vector<vector<int>> &graph) {
19
vis[i] = true, curr_vis[i] = true;
20

21
for (auto j : graph[i]) {
22
if (!vis[j]) {
23
if (dfs(j, vis, curr_vis, safe, graph) == false) return safe[i] = false;
24
} else if (curr_vis[j])
25
return safe[i] = false;
26
}
27

28
curr_vis[i] = false;
29
return safe[i];
30
}
31
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0