拓扑排序
Posted mohari
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拓扑排序相关的知识,希望对你有一定的参考价值。
问题1.判断有没有环
http://hihocoder.com/problemset/problem/1174
用vector模拟邻接表,开一个记录入度的一维数组,一个存储入度为0的队列
ac代码如下
#include<iostream> #include<algorithm> #include<vector> #include<queue> #include<string.h> using namespace std; typedef long long int ll; int n,k,a,b,t,m; const int maxn=1e5+5; vector<int>v[maxn]; queue<int>q; int indge[maxn]; bool judge() { int num=0; while(!q.empty())q.pop(); for(int i=1;i<=n;i++){ if(!indge[i])q.push(i); } while(!q.empty()){ int tot=q.front(); q.pop(); num++; for(int i=0;i<v[tot].size();i++){ if(--indge[v[tot][i]]==0)q.push(v[tot][i]); } } if(num==n)return true; else return false; } int main() { cin>>t; for(int i=1;i<=t;i++){ cin>>n>>m; for(int i=0;i<maxn;i++)v[i].clear(); memset(indge,0,sizeof(indge)); for(int j=0;j<m;j++){ cin>>a>>b; v[a].push_back(b); indge[b]++; } if(judge())puts("Correct"); else puts("Wrong"); } return 0; } /* 2 2 2 1 2 2 1 3 2 1 2 1 3 */
以上是关于拓扑排序的主要内容,如果未能解决你的问题,请参考以下文章