浙大PAT (Advanced Level) Practise 1004. Counting Leaves (30)

来源:互联网 发布:sql 编辑器 编辑:程序博客网 时间:2024/05/12 15:49
#include <iostream> #include <cstdio>#include <map>#include <vector>using namespace std;/*采用深度搜索方法,获取每一层的叶子节点,用map存储数据,省去了建立树的麻烦,此方法更为简便*/void dfs(map<int, vector<int> > &tree, map<int,int> &res, int id, int level){if(tree.count(id) == 0){//如果没有子节点,相应的叶子节点+1    ++res[level];return;}for(int i = 0; i < tree[id].size(); ++i){//循环访问每一个子树dfs(tree, res, tree[id][i], level+1);}}int main(){int n,m;map<int, vector<int> > tree;//用map按照结点与其子节点存取树map<int, int> res;scanf("%d %d",&n,&m);for(int i = 0; i < m; ++i){//读取数据int id, k;scanf("%d %d", &id, &k);while(k-- > 0){int tmp;scanf("%d",&tmp);tree[id].push_back(tmp);}}dfs(tree, res, 1, 1);//深度搜索获得结果map<int,int>::iterator it = --res.end();int maxLevel = (--res.end())->first;//获取最大层数for(int i = 1; i <= maxLevel; ++i){//输出结果if(i == 1){cout<<res[i];}else{cout<<" "<<res[i];}}return 0; }

0 0
原创粉丝点击