两点:1、数据结构的建立
2、BFS 分层
#include<iostream>
#include<stdio.h>
#include<string.h>
#define N 105
struct node{
int child[N];//子节点
int k;//子节点数
}s[N];
int que[N*N];
void init(){
int i;
for(i=0;i<N;i++)
s[i].k=0;
}
int main()
{
int n , m ,i , j , r ,t ,l , k , count;
//scanf("%d%d",&n,&m);
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
for(t=0;t<m;t++)
{
scanf("%d",&i);
scanf("%d",&s[i].k);
for(j=0;j<s[i].k;j++)
scanf("%d",&s[i].child[j]);
}
//}
que[0]=1;//从第一个节点01开始
k=1;//第一个节点在队列中的下标界限
r=1;//用作队列中每一层计数的下标界限
l=0;//用作队列中每一层计数下标游标
for(t=0;l<k;t++)
//for(l=0,r=1,t=0;l<k;r=k,t++)
{
count=0;//统计每层有孩子的节点数
for(;l<r;l++)
{
i=que[l];
if(s[i].k==0) count++;
//if(s[i].k!=0) count++;
for(j=0;j<s[i].k;j++)
que[k++]=s[i].child[j];
}
r=k;//更新下一层在队列中新的界限
if(t)
printf(" %d",count);
else
printf("%d",count);
}
printf("\n");
}
return 0;
}