PAT1005-The Largest Generation

来源:互联网 发布:用友t3数据库安装 编辑:程序博客网 时间:2024/06/17 12:15

题意:

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

解答:

本题关键两个问题:

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



0 0
原创粉丝点击