题目 :Problem - 1285 (hdu.edu.cn)
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,g[510][510],indgr[510],res[510];
void topsort(int n){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(!indgr[j]){
res[i]=j;
indgr[j]--;
break;
}
}
for(int j=1;j<=n;j++){
if(g[res[i]][j]){
indgr[j]--;
}
}
}
}
void myoutput(int n){
for(int i=1;i<=n;i++){
if(i!=n){
printf("%d ",res[i]);
}
else{
printf("%d\n",res[i]);
}
}
}
int main(){
while(~scanf("%d %d",&n,&m)){
memset(g,0,sizeof g);
memset(indgr,0,sizeof indgr);
for(int i=1;i<=m;i++){
scanf("%d %d",&x,&y);
if(!g[x][y]){
g[x][y]=1;
indgr[y]++;
}
}
topsort(n);
myoutput(n);
}
return 0;
}