下面附上代码
拓扑排序判环,十分管用。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
int a[110][100],deg[1100];
void topsort(int n){
int k=0;
for(int i=1;i<=n;i++){
if(i==n&&!k){
printf("此图有环");
}
for(int j=1;j<=n;j++){
if(deg[j]==0){
k=j;
printf("%d%c",j,i==n?'\n':' ');
deg[i]--;
break;
}
}
for(int j=1;j<=n;j++){
if(k==0)continue;
if(a[k][j]){
a[k][j]=0;
deg[j]--;
}
}
}
}
int main(){
int i,j,k,m,n;
scanf("%d%d",&n,&m);
while(m--){
int x,y;
scanf("%d%d",&x,&y);
a[x][y]=1;
deg[y]++;
}
topsort(n);
return 0;
}