题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1004
C语言源码:
#include<stdio.h>
#define maxsize 1000
int T[maxsize];
typedef struct family
{
int top;
int child[maxsize];
}family;
family f[maxsize];
int main()
{
int j,n,m,i,id,k,front,rear,queue[maxsize*maxsize],stack[maxsize],top,flag;
for(i=0;i<maxsize;i++)
{
T[i]=0;
f[i].top=0;
stack[i]=0;
}
front=0;
rear=0;
top=0;
scanf("%d %d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%d %d",&id,&k);
T[id]++;
f[id].top=k;
for(j=0;j<k;j++)
{
scanf("%d",&f[id].child[j]);
T[f[id].child[j]]+=2;
}
}
i=0;
while(i<maxsize&&T[i]!=1)
i++;
queue[rear++]=i;
flag=rear;
while(front!=rear)
{
i=queue[front++];
if(f[i].top==0)
stack[top]++;
else
{
for(j=0;j<f[i].top;j++)
queue[rear++]=f[i].child[j];
}
if(front==flag)
{
top++;
flag=rear;
}
}
for(i=0;i<top-1;i++)
printf("%d ",stack[i]);
printf("%d\n",stack[i]);
return 0;
}