前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >拓扑排序

拓扑排序

作者头像
lexingsen
发布2022-05-06 20:24:32
3510
发布2022-05-06 20:24:32
举报
文章被收录于专栏:乐行僧的博客乐行僧的博客

AcWing848.有向图的拓扑序列

代码语言:javascript
复制
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int N=1e5+10;

int n, m;
vector<int> G[N];
int indegree[N];

vector<int> ans;

bool topSort() {
    int cnt = 0;
    queue<int> q;
    for(int i=1; i<=n; ++i) {
        if(indegree[i] == 0) {
            q.push(i);
        }
    }

    while(!q.empty()) {
        int u = q.front();q.pop();
        ans.push_back(u);
        for(int i=0; i<G[u].size(); ++i) {
            int v = G[u][i];
            indegree[v] --;
            if(indegree[v] == 0) q.push(v);
        }

        G[u].clear();
        cnt ++;
    }
    return cnt == n;

}

int main() {
    memset(indegree, 0, sizeof indegree);
    cin >> n >> m;

    while(m --) {
        int a,b;
        cin >> a >> b;
        G[a].push_back(b);
        indegree[b] ++;
    }
    if(!topSort())cout << -1 << endl;
    else{
        for(int i=0; i<ans.size(); ++i) {
            cout << ans[i];
            if(i!=ans.size()-1) cout << " ";
        }
        cout << endl;
    }

    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档