PTA 1004 Counting Leaves

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dpdpd/article/details/82119430

题意:给一棵树,计算每一层的没有儿子节点的个数
思路:bfs,然后用level数组保存每个点的层数
注意点:
1、当只有一个节点的时候,输出1

#include<bits/stdc++.h>
using namespace std;
int level[105];
int ans[105];
int main(){
    int n,m;
    cin>>n>>m;
    queue<int> q;
    vector<int> v[105];
    for(int i=0;i<m;i++){
        int r,k;
        cin>>r>>k;
        int tmp;
        for(int j=0;j<k;j++){
            cin>>tmp;
            v[r].push_back(tmp);
        }
    }
    q.push(1);
    level[1]=1;
    int maxl = 1;
    while(!q.empty()){
        int r = q.front();
        q.pop();
        vector<int>::iterator it;
        for(it=v[r].begin();it!=v[r].end();it++){
            level[*it]=level[r]+1;
            maxl = max(maxl,level[*it]);
            if(v[*it].size()==0)
                ans[level[r]+1]++;
            q.push(*it);
        }
    }
    if(v[1].size()==0){
        cout<<"1\n";
    }else{
    for(int i=1;i<=maxl;i++){//只有一个节点的情况
        if(i!=1)
        cout<<" "<<ans[i];
        else
        cout<<ans[i];
    }}
    return 0;
}

猜你喜欢

转载自blog.csdn.net/dpdpd/article/details/82119430