拓扑排序的前提是图中不能有环,因此拓扑排序可以用来判断是否有环
时间复杂度O
#include<iostream>
#include<vector>
#include<string.h>
#include<queue>
using namespace std;
int n,m;
int deg[100];//度
vector<int> G[100];
void TPsort()
{
queue<int> q;
for(int i=1;i<=n;i++)
if(!deg[i]) q.push(i);//把i存入队列
while(!q.empty())
{
int x=q.front();//最前面的元素
q.pop();//弹出最前面的元素
printf("%d",x);
for(int i=0;i<G[x].size();i++)
{
int v=G[x][i];
if(deg[v]>0)
{
deg[v]--;
if(deg[v]==0) q.push(v);
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
memset(deg,0,sizeof(deg));
for(int i=1;i<=m;i++)//m条边
{
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
deg[v]++;
}
TPsort();
return 0;
}