源代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e2;
bool g[maxn][maxn]={false};
int n;
int top[maxn];
bool topSort(){
int stack[maxn],p=0;
int index = 0;
int in[maxn];
for(int i=1;i<=n;i++)
{
int inDdgree=0;
for(int j=1;j<=n;j++){
if(g[j][i])inDdgree++;
}
in[i]=inDdgree;
if(!inDdgree)stack[p++]=i;
}
int v;
while(p){
v = stack[--p];
top[index++]=v;
for(int i=1;i<=n;i++){
if(g[v][i]){
in[i]--;
if(!in[i])stack[p++]=i;
}
}
}
return n==index;
}
int main(){
int m;
int a,b;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d%d",&a,&b);
g[a+1][b+1]=true;
}
if(topSort()){
for(int i=0;i<n;i++){
printf("%d ",top[i]);
}
}else{
printf("该图存在负环");
}
}
测试1
输入
5 7
1 0
4 3
2 1
2 0
3 2
4 1
4 2
输出
5 4 3 2 1
测试2
输入
5 8
0 3
1 0
4 3
2 1
2 0
3 2
4 1
4 2
输出
该图存在负环