#include<iostream>
using namespace std;
struct EDGE
{
int v,next;
}e[200];
int head[200],k,intdegree[200],queue[200],a[200];
void insert(int u,int v)
{
e[k].v=v;
e[k].next=head[u];
head[u]=k++;
}
int tuopu(int n)
{
int i,u,r=0,f=0,j=0;
for(i=1;i<=n;i++)
if(intdegree[i]==0) //存的是起点的入度
queue[r++]=i; // 存的是入度为0的起点
while(f<r)
{
u=queue[f++];
a[j++]=u;
for(i=head[u];i!=-1;i=e[i].next)
{
intdegree[e[i].v]--;
if(intdegree[e[i].v]==0)
queue[r++]=e[i].v;
}
}
return j;
}
int main()
{
memset(head,-1,sizeof(head));
memset(intdegree,0,sizeof(intdegree));
k=0;
int n,i,j,v;
cin>>n;
for(i=1;i<=n;i++)
{
while(cin>>v&&v)
{
insert(i,v);
intdegree[v]++;
}
}
j=tuopu(n);
for(i=0;i<j-1;i++)
cout<<a[i]<<" ";
cout<<a[i]<<endl;
}
poj 2367
最新推荐文章于 2021-02-17 19:46:46 发布