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);
}
}