代码
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int ne[N],e[N],h[N],idx;
int n,m;
void add(int a,int b)
{
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
int q[N];
int din[N];
bool bfs()
{
int hh=0,tt=-1;
for(int i=1;i<=n;i++)
{
if(din[i]==0) q[++tt]=i;
}
while(hh<=tt)
{
int u=q[hh++];
for(int i=h[u];~i;i=ne[i])
{
int v=e[i];
din[v]--;
if(din[v]==0)
{
q[++tt]=v;
}
}
}
return hh==n;
}
int main()
{
memset(h,-1,sizeof(h));
cin>>n;
for(int i=1;i<=n;i++)
{
int a;
while(cin>>a&&a!=0)
{
add(i,a);
din[a]++;
}
}
bfs();
for(int i=0;i<n;i++)
{
cout<<q[i]<<' ';
}
return 0;
}
核心
拓扑排序