代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int maxn=505;
int mpt[maxn][maxn];
int lev[maxn];
vector<int> v[maxn];
priority_queue<int,vector<int>,greater<int> >q;
void topo(int s)
{
for(int i=1;i<=s;++i)
{
if(lev[i]==0) q.push(i);
}
int flag=0;
while(!q.empty())
{
int now=q.top();
q.pop();
if(flag) cout<<" "<<now;
else cout<<now;
flag++;
for(int i=0;i<v[now].size();++i)
{
int next=v[now][i];
lev[next]--;
if(!lev[next]) q.push(next);
}
}
if(flag!=s) cout<<"图有环,不存在拓扑排序"<<endl;
}
int main()
{
while(cin>>n>>m)
{
memset(mpt,0,sizeof(mpt));
while(m--)
{
int a,b;
cin>>a>>b;
mpt[a][b]=1;
}
for(int i=1;i<=n;++i)
{
v[i].clear();
for(int j=1;j<=n;++j)
{
if(mpt[i][j])
{
v[i].push_back(j);
lev[j]++;
}
}
}
topo(n);
cout<<endl;
}
return 0;
}