1094. The Largest Generation (25)-(dfs,树的遍历,统计每层的节点数)

题目很简单,就是统计一下每层的节点数,输出节点数最多的个数和对应的层数即可。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>

using namespace std;
const int maxn=105;
int num[maxn];
int head[maxn];
int tot;

struct Edge{
    int to;
    int next;
}edge[maxn];

void init(){
    memset(head,-1,sizeof(head));
    tot=0;
}
void add(int x,int y){
    edge[tot].next=head[x];
    edge[tot].to=y;
    head[x]=tot++;
}
void dfs(int root, int layer){
    num[layer]++;
    for(int i=head[root];i!=-1;i=edge[i].next){
        int v=edge[i].to;
        dfs(v,layer+1);
    }
}
int main()
{
    int n,m,k,a,b;
    init();
    scanf("%d %d",&n,&m);
    for(int i=1;i<=m;i++){
        scanf("%d %d",&a,&k);
        for(int j=0;j<k;j++){
            scanf("%d",&b);
            add(a,b);
        }
    }
    memset(num,0,sizeof(num));
    dfs(1,1);
    int maximum=0,layer;
    for(int i=1;i<maxn;i++){
        if(num[i]>maximum){
            maximum=num[i];
            layer=i;
        }
    }
    printf("%d %d
",maximum,layer);
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/chenxiwenruo/p/6385366.html