讲解
上述链接的模板有两处错误
int ans[x++]=u; ///记录答案 这个把int去掉
if(cnt!=n) cout<<"有环"<<endl; 不是cnt!=n,是x!=n
模板
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#define MAX 1000
#define INF 0x3fffffff //无穷大
using namespace std;
int in[MAX];//入度
int ans[MAX];
int n,m; //n点数m边数
struct node { //链式前向星
int to,next,w;
} edge[MAX*MAX];
int head[MAX];
queue<int> q;
void topsort()
{
for(int i = 1 ; i<=n;i++){
if(in[i]==0){
q.push(i); ///把入度为0的点压入队列
}
}
int x=0;
while(!q.empty()){
int u=q.front();
q.pop();
ans[x++]=u; ///记录答案
for(int i = head[u];~i;i=edge[i].next){ ///链式向前星存的图
int to=edge[i].to;
in[to]--; ///入度减1
if(in[to]==0){
q.push(to); ///入度为0压入队列
}
}
}
if(x!=n) cout<<"有环"<<endl; //ans中必须存n个点否则存在环
else{
cout<<ans[0]; ///输出其拓扑序
for(int i = 1 ;i<n;i++)
cout<<" "<<ans[i];
cout<<endl;
}
}
int main(){
return 0;
}