A1094 The Largest Generation (25分)

一、技术总结

  1. 首先题意要理解清楚,是查找最多人数的一代。
  2. 遍历树可以使用DFS和BFS,重点是统计每一层的人数。首先是定义一个统计每一层人数的hashTable的数组。
  3. BFS and DFS
//BFS
void BFS(int root){
	queue<int> q;
	q.push(root);
	Node[root].layer = 1;
	while(!q.empty()){
		int now = q.front();
		hashTable[Node[now].layer]++;
		q.pop();
		for(int i = 0; i < Node[now].child.size(); i++){
			int child = Node[now].child[i];
			Node[child].layer = Node[now].layer + 1;
			q.push(Node[now].child[i]);
		}
	}
} 
//DFS
void DFS(int index, int level){
	hashTable[level]++;
	for(int i = 0; i < Node[index].child.size(); i++){
		DFS(Node[index].child[i], level+1);
	}
}

二、参考代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 110;
struct node{
	int layer;
	vector<int> child;
}Node[maxn];
int Layer, sum;//用于记录这一代中的最多人数,layer表示层数。 
int hashTable[maxn] = {0};
void BFS(int root){
	queue<int> q;
	q.push(root);
	Node[root].layer = 1;
	while(!q.empty()){
		int now = q.front();
		hashTable[Node[now].layer]++;
		q.pop();
		for(int i = 0; i < Node[now].child.size(); i++){
			int child = Node[now].child[i];
			Node[child].layer = Node[now].layer + 1;
			q.push(Node[now].child[i]);
		}
	}
} 
int main(){
	int n, num;//n是总人数,num是记录有孩子的结点数
	scanf("%d%d", &n, &num);
	int id;//记录有孩子的结点编号 
	for(int i = 0; i < num; i++){
		int num, id2;
		scanf("%d%d", &id, &num); 
		for(int j = 0; j < num; j++){
			scanf("%d", &id2);
			Node[id].child.push_back(id2);
		}
	} 
	BFS(1);
	int maxValue = -1, maxLevel = 0;
	for(int i = 1; i < maxn; i++){
		if(hashTable[i] > maxValue){
			maxValue = hashTable[i];
			maxLevel = i;
		}
	}
	printf("%d %d", maxValue, maxLevel);
	return 0;
}
posted @ 2020-02-17 20:10  睿晞  阅读(115)  评论(0编辑  收藏  举报