1. 原题:https://www.patest.cn/contests/pat-a-practise/1004
2. 思路:
题意就是输出树的每层叶子节点数。
无需构建树,通过DFS或者BFS遍历就好。
这里采用bfs。
无需构建树,通过DFS或者BFS遍历就好。
这里采用bfs。
已AC。
3. 源码:
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int N, M;
vector< vector<int> > T;
void bfs();
int main()
{
freopen("in.txt", "r", stdin);
scanf("%d %d", &N, &M);
T.resize(N + 1);
for (int i = 0; i < M; i++)
{
int parent, k;
scanf("%d %d", &parent, &k);
T[parent].resize(k);
for (int j = 0; j < k; j++)
{
scanf("%d", &T[parent][j]);
}
}
bfs();
return 0;
}
void bfs()
{
queue<int> Q;
Q.push(1);
int current, cnt;
int last = 1;
cnt = 0;
while (!Q.empty())
{
int node = Q.front();
Q.pop();
if (T[node].empty())
{
cnt++;
}
else
{
for (int i = 0; i < T[node].size(); i++)
{
Q.push(T[node][i]);
current = T[node][i];
}
}
if (last == node)
{
if (node != 1)
printf(" ");
printf("%d", cnt);
cnt = 0;
last = current;
}
}
printf("\n");
return;
}