注意点:
此题是一个层序遍历题,用简单的宽度优先搜索一遍就可以模拟出结果。
代码:
#include<iostream>
using namespace std;
struct Line{
int node;
int level;
};
int main()
{
int son[101][101];
struct Line line[111];
int left, right;
int i, j, n, m;
int id1, k, id2, level1, ans;
cin >> n >> m;
if (n==1)
{
cout << 1;
return 0;
}
for (i = 0; i < 100; i++)
son[i][0] = 0;
for (i = 0; i < m; i++)
{
cin >> id1 >> k;
son[id1][0] = k;
for (j = 1; j <= k; j++)
{
cin >> son[id1][j];
}
}
left = 0;
right = 0;
line[0].node = 1;
line[0].level = 0;
while (left <= right)
{
id1 = line[left].node;
level1 = line[left].level;
for (i = 1; i <= son[id1][0]; i++)
{
right++;
line[right].node = son[id1][i];
line[right].level = level1 + 1;
}
left++;
}
line[left].level = line[right].level + 1;
line[left].node = 1;
level1 = 1;
cout << 0;
ans = 0;
for (i = 1; i <= left; i++)
{
if (level1 != line[i].level)
{
level1++;
cout << " " << ans;
ans = 0;
}
if (son[line[i].node][0] == 0)
ans++;
}
return 0;
}