题目
思路
DFS
代码
#include <iostream>
#include <vector>
using namespace std;
vector<int> in[105];
int cnt[105] = {0};
int maxLevel = 1;//最大层数
void dfs(int v, int level){
if(in[v].size() == 0){
// 如果没有儿子,说明自己就是叶子节点,所在层数的叶子节点个数 +1
cnt[level]++;
}
if(level > maxLevel) maxLevel = level;// 更新最大层数
for(int i=0; i<in[v].size(); i++){
int u = in[v][i];
dfs(u, level + 1);
}
}
int main(){
int n, m, k;
scanf("%d %d", &n, &m);
if(n == 0) exit(0);
for(int i=0; i<m; i++){
int cur;
scanf("%d %d", &cur, &k);
for(int j=0; j<k; j++){
int tmp;
scanf("%d", &tmp);
in[cur].push_back(tmp);
}
}
dfs(1, 1);
for(int i=1; i<=maxLevel; i++){
printf("%d%s", cnt[i], i<maxLevel ? " " : "\n");
}
return 0;
}