先存一份代码在这
#include <iostream>
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
vector<int> g[505];
int indegree[505];
int main()
{
int n,m,a,b;
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=0;i<=n;++i){
indegree[i]=0;
}
for(int i=0;i<m;++i){
scanf("%d%d",&a,&b);
g[a].push_back(b);
indegree[b]++;
}
/*for(int i=1;i<=n;++i){
cout<<"indegree: "<<indegree[i]<<endl;
cout<<"size: "<<g[i].size()<<endl;
}*/
priority_queue<int,vector<int>,greater<int> > q;
for(int i=1;i<=n;++i){
if(indegree[i]==0){
q.push(i);
//break;
}
}
int num=1;
while(!q.empty()){
int tmp=q.top();
cout<<tmp;
q.pop();
if(num!=n){
cout<<" ";
}
for(int i=0;i<g[tmp].size();++i){
indegree[g[tmp][i]]--;
//cout<<"i: "<<i<<" index: "<<g[tmp][i]<<endl;
//cout<<"!!!!!!!"<<indegree[g[tmp][i]]<<endl;
if(indegree[g[tmp][i]]==0){
q.push(g[tmp][i]);
}
}
}
}
return 0;
}