【PAT】A1094 Largest_Generation

终于在PAT上提交了第一题

PAT Bug:

1) node_tree 这种全局变量不要在main里创建,这样是在栈上。改成全局变量。

2)scanf 竟然强制需要返回值

调试Bug

1)使用map进行layer和number的统计,但是map是按照key的升序,而不是value的升序

2)在现在的编译器中,不支持auto声明iterator,必须指定类型声明

3)在map迭代时,迭代器不支持比较大小,而需要使用!=end(),而不能使用<end()

#include <iostream>
#include <vector>
#include <cstdio>
#include <queue>
#include <map>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef vector< vector<int> > Vector2D;
	
vector<Node> node_tree[family_num];
	
struct Node{
	int id;
	int layer;
}; 

void BFS (vector<Node> *node_tree,map<int,int> &gen_population){
	
	queue<Node> node_queue;
	
	Node root_node;
	
	root_node.id = 1;
	root_node.layer=1;
	
	node_queue.push(root_node);
	
	while(!node_queue.empty()){
		Node tmp_node;
		tmp_node = node_queue.front();
		node_queue.pop();
		int current_id = tmp_node.id;
		int current_layer = tmp_node.layer;
		map<int,int>::iterator gen_iter=gen_population.find(current_layer); 
		if(gen_iter!=gen_population.end()){
			gen_population[current_layer]=gen_population[current_layer]+1;	
			//cout<<"current_layer"<<current_layer<<"BooNa"<<endl;
		}else{
			gen_population[current_layer]=1;
			//cout<<"current_layer"<<current_layer<<"BooYeah"<<endl;
		}
		//cout<<"current_layer"<<current_layer<<endl; 
		vector<Node>::iterator iter ;
		if(!node_tree[current_id].empty()){
			for (iter= node_tree[current_id].begin();iter<node_tree[current_id].end();iter++){
			Node sub_tmp_node = *iter;
			sub_tmp_node.layer=current_layer+1;
			node_queue.push(sub_tmp_node);
			//cout<<"DFS node "<<current_id<<"sub_id "<<sub_tmp_node.id<<"current_layer"<<sub_tmp_node.layer<<endl;
			}
		} 
	}
}
int main(int argc, char** argv) {
	
	int unused __attribute__((unused));
	 
	int family_num,node_num;
	
	map<int,int> gen_population;
		
	unused=scanf("%d %d",&family_num,&node_num);
	
	for (int i=0;i<node_num;i++) {
		int tmp_node_id, sub_id_num;
		unused=scanf("%d %d",&tmp_node_id,&sub_id_num);
		for(int j=0;j<sub_id_num;j++){
			Node node; 
			int sub_id; 
			unused=scanf("%d",&sub_id);
			node.id = sub_id;
			node.layer = -1;
			node_tree[tmp_node_id].push_back(node);
			//cout<<"node "<<tmp_node_id<<"sub_id "<<sub_id<<endl;
		}
	}

	BFS (node_tree,gen_population);

	map<int,int>::iterator iter,max_iter;
	
	
	int max_population=0;
	for (iter = gen_population.begin();iter!=gen_population.end();iter++){
		if(iter->second>max_population){
			max_population = iter->second;
			max_iter=iter;
		}		
	}
	

	
	//int max_num = gen_population[4];
		
	printf("%d %d",max_iter->second,max_iter->first);
		
	return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值