title: counting leaves
题意:
通过一定的格式建立以来一棵森林(多叉树),然后提问,树的每一层有多少个叶子节点。
这里注意,树是特殊的图的一种,所以树的表示也可以用图的邻接表来保存,这样保存起来,通过一遍深搜就完事!
附代码:
#include<stdio.h> #include<stdlib.h> #include<iostream> #include<vector> #define Max_len 105 using namespace std; vector <int> map[Max_len]; int du[Max_len] = {0}; int value[Max_len] = {0}; int max_dep; void dfs(int var, int dep); int main(){ int m, n, a, b, i; int sum, temp; max_dep = 0; scanf("%d %d", &m, &n); sum = m - 1; while(sum > 0){ scanf("%d", &a); scanf("%d", &b); du[a] = b; for(i = 0; i < b; i++){ scanf("%d", &temp); map[a].push_back(temp); sum --; } } dfs(1, 0); for(i = 0; i < max_dep; i++){ printf("%d ", value[i]); } printf("%d\n", value[max_dep]); return 0; } void dfs(int var, int dep){ int i, size; int a; if(dep >= max_dep){ max_dep = dep; } if(du[var] == 0){ value[dep]++; } size = map[var].size(); for(i = 0; i < size; i++){ a = map[var][i]; dfs(a, dep + 1); } }