很简单的一道拓扑排序题,但是测试数据可能会给出重复的竞争关系。。。。所以在计算入度之前要加一个判断。。。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int map[515][515],in[515],v[515];
int main() {
int n,m,x,y,k;
while(cin>>n>>m) {
memset(map,0,sizeof(map));
memset(in,0,sizeof(in));
memset(v,0,sizeof(v));
k=0;
for(int i=0; i<m; i++) {
cin>>x>>y;
if(!map[x][y]){
map[x][y]=1;
in[y]++;
}
}
for(int j=0; j<n; j++) {
for(int i=1; i<=n; i++)
if(!v[i]&&in[i]==0) {
k=i;
break;
}
v[k]=1;
for(int i=1;i<=n;i++){
if(!v[i]&&map[k][i])
in[i]--;
}
if(j<n-1)cout<<k<<' ';
}
cout<<k<<endl;
}
return 0;
}