您的位置:首页 > 其它

PAT1005-The Largest Generation

2016-03-08 20:24 232 查看
题意:

家族组成树,求孩子最多的一层。

解答:

本题关键两个问题:

1、用什么数据结构储存数据

2、怎么把数据读取出来处理

定义了一个节点对象存放数据,在取出来的时候使用了队列,加入队列的是这一层所有的孩子,也就是说要先把队列的父类全部取出来,然后将下一代全部压入,没这么操作一次,深度加1,并且保存最大孩子数。

此处注意使用addAll(),可以方便不少。

还要注意节点对象的定义了使用了数组。

具体java代码:

import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int N=in.nextInt();
int M=in.nextInt();
Node[] list=new Node[N+1];
for(int i=0;i<N+1;i++){
list[i]=new Node();
}
for(int i=0;i<M;i++){
int temp=in.nextInt();

int n=in.nextInt();
for(int j=0;j<n;j++){
list[temp].children.add(in.nextInt());
}
}
in.close();
Queue<Integer> q=new LinkedList();
int max=1;
int maxLevel=1;
int level=1;
q.add(1);
while(!q.isEmpty()){
int k=q.size();
for(int i=0;i<k;i++){
int node=q.poll();
q.addAll(list[node].children);
}
level++;
int t=q.size();
if(t>max){
max=t;
maxLevel=level;
}
}
System.out.println(max+" "+maxLevel);
}

}
class Node{
ArrayList<Integer> children=new ArrayList();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: