其他分享
首页 > 其他分享> > 拓撲排序(搬運)

拓撲排序(搬運)

作者:互联网

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;
    }
};

标签:int,拓撲,搬運,++,edges,graph,visited,排序,size
来源: https://www.cnblogs.com/sixiaoxiaoya/p/16326371.html