现在的位置: 首页 > 综合 > 正文

pat 1004

2014年08月08日 ⁄ 综合 ⁄ 共 772字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.