题目意思是,给你一颗树,让你求每层上面的叶子节点数。
我用的是深搜,从根节点开始搜索,用res数组记录每层的叶子节点数。
#include <cstdio>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define INF 0x3fffffff
using namespace std;
int pic[101][101],res[101],fg[101],n,bot;
void dfs(int k,int f)
{
if (fg[k]==1)
res[f]++;
if (f>bot)
bot=f;
for (int i=1;i<=n;i++)
{
if (pic[k][i]==1)
dfs(i,f+1);
}
return;
}
int main()
{
memset(pic,0,sizeof(pic));
memset(res,0,sizeof(res));
int m,k,a,b;
cin>>n>>m;
while (m--)
{
cin>>a>>k;
while(k--)
{
cin>>b;
pic[a][b]=1;
}
}
bot=0;
for (int i=1;i<=n;i++)
{
int flag=0;
for (int j=1;j<=n;j++)
if (pic[i][j]==1)
flag=1;
if (flag==0)
fg[i]=1;
}
dfs(01,0);
for (int i=0;i<bot;i++)
cout<<res[i]<<' ';
cout<<res[bot];
}