拓撲排序(搬運)
阿新 • • 發佈:2022-05-30
class Solution { #define maxn 10010 vector<int> edges[maxn]; public: vector<int> eventualSafeNodes(vector<vector<int>>& graph) { int i, j; int n = graph.size(); bool visited[maxn]; int in[maxn]; queue <int> q; memset(visited, 0, sizeof(visited)); memset(in, 0, sizeof(in)); for(i = 0; i < n; ++i) edges[i].clear(); for(i = 0; i < n; ++i) { if(graph[i].size() == 0) { q.push(i); visited[i] = 1; }else { for(j = 0; j < graph[i].size(); ++j) { int v = i; int u = graph[i][j]; ++in[v]; edges[u].push_back(v); } } } while(!q.empty()) { int u = q.front(); q.pop(); for(i = 0; i < edges[u].size(); ++i) { int v = edges[u][i]; --in[v]; if(in[v] == 0) { visited[v] = 1; q.push(v); } } } vector<int> ret; for(i = 0; i < n; ++i) { if(visited[i]) { ret.push_back(i); } } return ret; } };