PAT 1004. Counting Leaves (30)

来源:互联网 发布:微商和淘宝哪个东西贵 编辑:程序博客网 时间:2024/05/18 01:11
层次遍历之
#include<iostream>#include<vector>#include<queue> #include<fstream>using namespace std;struct node{//节点类     int id;    vector<int> childs;    };vector<node>nodes;//节点链表 vector<int>rs;//每层的无孩子节点的节点个数 int main(){    fstream cin("data.txt");    int n=0,m=0;    cin>>n>>m;    for(int i=0;i<n;++i){        node n;        n.id=i;        nodes.push_back(n);        }    for(int i=0;i<m;++i){        int id=0,k=0;        cin>>id>>k;        node nd;        nd.id=id-1;        vector<int>childs;        int leaf_id;        for(int j=0;j<k;++j){            cin>>leaf_id;            childs.push_back(leaf_id-1);        }        nd.childs=childs;            nodes[id-1]=nd;    }//数据输入结束        int num_nodes_level=1;//当前节点个数     int num_no_child=0;    int count_nodes_level=0;//下一层节点个数     queue<size_t>q;    q.push(0);    for(int i=0;i<num_nodes_level;){                 size_t t_node=q.front();         q.pop();        size_t clen=(nodes[t_node]).childs.size();        if(clen==0){            num_no_child++;            }else{            count_nodes_level+=clen;            for(int j=0;j<clen;++j){                node t=nodes[t_node];                size_t id=t.childs.at(j);                q.push(id);            }            }         if(i+1==num_nodes_level){            i=0;                  rs.push_back(num_no_child);            num_no_child=0;            num_nodes_level=count_nodes_level;            count_nodes_level=0;            if(num_nodes_level==0)break;        }else{            ++i;            }            }    for(size_t i=0;i<rs.size();++i){        if(i+1==rs.size())            cout<<rs[i];        else            cout<<rs[i]<<" ";    }    cout<<"\n";        system("pause");    return 0;} 

0 0
原创粉丝点击