PAT:1004. Counting Leaves (30) AC

#include<stdio.h>
#include<vector>
const int MAX=510;
using namespace std;

int n,m,le=0;          //节点数,非叶子节点数,最深层叶层数
vector<int> child[MAX];    //存储孩子情况
int number[MAX];      //每一层叶子数

void DFS(int s,int l)
{
  if(child[s].size()==0)
  {
    ++number[l];
    if(le<l)
      le=l;
    return;
  }
  for(int i=0 ; i<child[s].size() ; ++i)
  {
    DFS(child[s][i],l+1);
  }
}

int main()
{
  scanf("%d%d",&n,&m);
  for(int i=0 ; i<m ; ++i)
  {
    int node,k,c;
    scanf("%d%d",&node,&k);
    for(int j=0 ; j<k ; ++j)
    {
      scanf("%d",&c);
      child[node].push_back(c);
    }
  }

  DFS(1,1);      //从节点1开始,1是第一层

  for(int i=1; i<=le ; ++i)    //输出每层叶子数
  {
    printf("%d",number[i]);
    if(i!=le)
      printf(" ");
  }

  return 0;
}
原文地址:https://www.cnblogs.com/Evence/p/4326340.html