ACM入门之拓扑排序

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM入门之拓扑排序相关的知识,希望对你有一定的参考价值。

拓扑排序的应用:判断图中是否有环。
如果一个图有拓扑排序,说明该图一个没有环。

//基本思路就是先将入度为0的点入队,然后再依次扩展减入读。
//最后判断点数够n不够就可以了
int d[N],st[N],n;
vector<int>ans;
bool check()

    queue<int>q;
    for(int i=1;i<=n;i++) if(!d[i]) q.push(i),ans.push_back(i),st[i]=1;
    while(q.size())
    
        int u=q.front(); q.pop();
        for(int i=h[u];i!=-1;i=ne[i])
        
            int j=e[i];
            if(st[j]) continue;
            if(--d[j]==0) q.push(j),ans.push_back(j),st[j]=1;
        
    
    if(ans.size()==n) return true;
    return false;

入门习题:
848. 有向图的拓扑序列

以上是关于ACM入门之拓扑排序的主要内容,如果未能解决你的问题,请参考以下文章

ACM/ICPC 之 拓扑排序+DFS(POJ1128(ZOJ1083))

ACM/ICPC 之 拓扑排序-反向(POJ3687)

西安邮电大学第五届ACM-ICPC校赛(同步赛) B(拓扑排序)

西安邮电大学第五届ACM-ICPC校赛(同步赛) B(拓扑排序)

拓扑排序

拓扑序列以及排序