输出每一层叶子节点数,将树保存在邻接表里面, DFS
#include<iostream>
using namespace std;
int tree[105][105];
bool isleaf[105];
bool vis[105];
int res[105];
int deep,max_deep;
void initialize()
{
for(int i = 0 ; i < 105 ; i++)
{
for(int j = 0 ; j < 105 ; j++)tree[i][j] = 0 ;
isleaf[i] = true;
vis[i] = false;
res[i] = 0;
}
}
void dfs(int cur, int n_)
{
deep++;
if(isleaf[cur])
{
res[deep]++;
if(deep>max_deep)max_deep = deep;
return;
}
for(int c = 2 ; c <= n_ ; c++)
{
if(tree[cur][c]==1 && !vis[c])
{
vis[c] = !vis[c];
dfs(c,n_);
deep--;
}
}
}
int main()
{
int n , m , id , k , tmp ;
while(cin >> n >> m)
{
initialize();
deep = max_deep = 0 ;
for(int i = 0 ; i < m ; i++)
{
cin >> id >> k;
for(int j = 0 ; j < k ; j++)
{
cin >> tmp;
tree[id][tmp] = 1;
isleaf[id] = false;
}
}
dfs(1 , n);
for(int g=1 ; g < max_deep ; g++)cout << res[g]<<" ";
cout<<res[max_deep]<<endl;
}
return 0;
}