zoukankan      html  css  js  c++  java
  • 拓扑排序

    #include <iostream>
    #include <vector>
    #include <cstring>
    
    using namespace std;
    
    const int N=1e5+5;
    
    int h[N], e[N], ne[N], indegree[N], idx;
    
    int head, tail, queue[N];
    
    
    void add(int x, int y){
        e[idx] = y;
        ne[idx] = h[x];
        h[x] = idx++;
    }
    
    void tpSort(int n){
        head = 0; tail = -1;
        for (int i=1; i<=n; i++){
            if (indegree[i]==0) queue[++tail] = i;
        }
    
        while (head<=tail){
            int node = queue[head++];
            for (int i = h[node]; i != -1; i =ne[i]){
                int j = e[i];
                indegree[j]--;
                if (indegree[j]==0) queue[++tail] = j;
            }
        }
        if (tail != n-1) cout << -1;
        else {
            for (int i=0; i<n; i++) cout<<queue[i]<<" ";
        }
    }
    
    int main(){
        int n, m, x, y;
        cin >> n >> m;
        memset(h, -1, sizeof h);
        for (int i=0; i<m; i++) {
            cin >> x >> y;
            add(x, y);
            indegree[y] ++;
        }
        tpSort(n);
        return 0;
    }
  • 相关阅读:
    Python编程四大神兽:迭代器、生成器、闭包和装饰器
    Linux基础
    3.8记录
    3.7记录
    3.6进度记录
    3.5进度
    3.4进度
    3.3进度
    3.2进度记录
    3.1记录
  • 原文地址:https://www.cnblogs.com/Chri-K/p/13935759.html
Copyright © 2011-2022 走看看