题意
题解
有向图中,若节点能走到圈中,则不是安全节点;反之,则是安全节点。那么 d f s dfs dfs 时,除了维护访问过的节点,同时维护节点是否为安全节点,将不能走到圈的节点加入答案即可。
class Solution
{
public:
vector<int> res;
vector<bool> used, label;
bool dfs(int u, vector<vector<int>> &G)
{
used[u] = true;
bool flag = true;
for (int i = 0; i < G[u].size(); i++)
{
int w = G[u][i];
flag &= (used[w] ? label[w] : dfs(w, G));
}
if (flag)
{
res.push_back(u);
label[u] = true;
}
return flag;
}
vector<int> eventualSafeNodes(vector<vector<int>> &graph)
{
int v = graph.size();
used.resize(v, false);
label.resize(v, false);
for (int i = 0; i < v; i++)
{
if (!used[i])
{
dfs(i, graph);
}
}
sort(res.begin(), res.end());
return res;
}
};