#include<bits/stdc++.h>
using namespace std;
int u,v,n,m,a[505],cnt=1,in[505],to[505][505]={0};
priority_queue<int>Q;
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>u>>v;
to[u][v]=1;
in[v]++;
}
for(int i=1;i<=n;i++)
if(in[i]==0) Q.push(i);
while(!Q.empty())
{
int tmp=Q.top();
Q.pop();
a[cnt]=tmp;
cnt++;
for(int i=1;i<=n;i++)
{
if(to[tmp][i])
{
to[tmp][i]=0;
in[i]--;
if(in[i]==0) Q.push(i);
}
}
}
for(int i=1;i<=n-1;i++) cout<<a[i]<<" ";
cout<<a[n];
return 0;
}
输入:
4 3//两个数n,m。其中n表示点的个数,m表示边数
1 2//接下来m行,每行两个数u、v,代表u有一条边指向v
2 3
4 3
答案输出//如果有多种答案,编号小的排在前面
1 2 4 3//最后没有空格
我的输出
4 1 2 3//最后没有空格
玄关求调