#include<iostream>//cin>>//cout<<
using namespace std;
#define MAX 999
struct Child{
int ID;//孩子身份标识
Child *iter;//指向同一父母的下一孩子
};
struct Member{
int level;//层次
Child *child;//指向孩子链表第一个结点
};
int main()
{
int N,M,ID,cID,K,i,k;
struct Member nodes[100];//全部N个结点
struct Child children[100];///
cin>>N>>M;
for(i=1; i<=N; i++)
{
nodes[i].level = MAX;
nodes[i].child = NULL;
}
nodes[1].level=0,k=0;//根
for(i=0;i<M;i++)
{
cin>>ID>>K;
for(;K--;k++)//ID的K个孩子
{
cin>>cID;//孩子ID-cID
children[k].ID=cID;///
children[k].iter=nodes[ID].child;//头插法录入孩子链表
nodes[ID].child=&children[k];
}
}
int n=N,count,level;
for(level=0;n;level++)
{
count=0;
for(i=1;i<=N;i++)
if(nodes[i].level==level)
{
n--;///
if(nodes[i].child==NULL) count++;
Child *c;
for(c=nodes[i].child;c;c=c->iter)///
nodes[c->ID].level =level+1;
}
cout<<count<<( n ? ' ' : '\0');//非常有效的格式控制!空格或结束,其他题目中类似可借鉴
}
return 0;
}
代码源自:https://www.jianshu.com/p/eba5b27dffd0
感谢!