還是代碼寫的少,有點手生,寫了好久。。。。
題目很明瞭,求一個家族樹上每一代人有多少沒有孩子的,就是求樹的每一層上有多少沒有子結點的,層次遍歷計數就好了。
//1004
//數組a用來存數據,第一個維度指結點編號,第二個維度中a[i][0]表示結點i是否有孩子
//a[i][1]爲k,a[i][2]以及以後表示i結點的所有孩子編號
int a[100][205];
int main(){
int n,m,nod,k;
while(scanf("%d%d",&n,&m)!=EOF&&n){
for(int p=0;p<m;p++){
scanf("%d %d",&nod,&k);
a[nod][0] = 1;
a[nod][1] = k;
for(int i=2;i<=a[nod][1]+1;i++) scanf("%d",&a[nod][i]);
}
queue<int> q;
vector<int> ans;
bool onlyroot = false;
int cnt = 0 ,all = 0;
q.push(1);
if(!a[1][0]) {onlyroot = true;ans.push_back(1);}//如果只有一個根節點
while(1){
if(onlyroot) break; //如果只有一個根節點
if(all>=n) break;//所有點都算過了
//所有這一層出隊,下一層入隊
int len = q.size();
all+=len;
while(len--)
{
int t = q.front();q.pop();
if(!a[t][0]) cnt++;
for(int i=0;i<a[t][1];i++)
{
q.push(a[t][i+2]);
}
}
ans.push_back(cnt);
cnt = 0;
}
for(int i=0;i<ans.size();i++)
{
printf("%d",ans[i]);
if(i<ans.size()-1) printf(" ");
}
printf("\n");
}
return 0;
}