当前位置:编程学习 > C/C++ >>

1004. Counting Leaves (30)

考察树结构的简单存储以及遍历搜索
[cpp]  
#include <iostream>  
#include <vector>  
#include <queue>  
  
int n, m;  
std::vector<std::vector<int>> edge;  
std::vector<int> BFS(int s)  
{  
    std::queue<std::pair<int,int>> q;  
    q.push(std::make_pair(s, 0));  
    int cur_step = 0;  
    std::vector<int> ans;  
    int cnt = 0;  
    while (!q.empty())  
    {  
        int u = q.front().first;  
        int step = q.front().second;  
        q.pop();  
        if(step > cur_step)  
        {  
            ans.push_back(cnt);  
            cnt = 0;  
            cur_step = step;  
        }  
        if(edge[u].size() == 0) cnt++;  
        for (int i = 0; i < edge[u].size(); ++i)  
        {  
            int v = edge[u][i];  
            q.push(std::make_pair(v, step+1));  
        }  
    }  
    ans.push_back(cnt);  
    return ans;  
}  
int main()  
{  
    while (scanf("%d%d",&n,&m)!=EOF)  
    {  
        //input edges  
        edge.clear();  
        edge.resize(n+1);  
        while (m--)  
        {  
            int a, k;  
            scanf("%d%d", &a,&k);  
            while (k--)  
            {  
                int b;  
                scanf("%d",&b);  
                edge[a].push_back(b);  
                //edge[b].push_back(a);  
            }  
        }  www.zzzyk.com
        std::vector<int> ans = BFS(1);  
        //output  
        for (int i = 0; i < ans.size(); ++i)  
        {  
            if(i != ans.size()-1)  
                printf("%d ", ans[i]);  
            else printf("%d\n", ans[i]);  
        }  
    }  
    return  0;  
}  
 
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,