您的位置:首页 > 其它

PAT-1004 - Counting Leaves

2018-03-28 22:58 239 查看
题目传送门/*
本题我是当成一道深搜的题目来做的
*/
#include <iostream>
#include <stdio.h>
#include <vector>
#define MAXN 110
int leave[MAXN];
int max_deep;//题目的最大深度
using namespace std;
vector <int> s[MAXN];
void dfs(int deep, int serial)
{
if (s[serial].size() == 0)
{//如果当前vector的长度为0就意味着它没有儿子,他就是叶子
if (max_deep < deep)
max_deep = deep;//这里用来记录最大的深度
leave[deep]++;//如果它是叶子节点那么这个深度的数值++
return;
}
else
{
for (int i = 0; i < s[serial].size(); i++)
dfs(deep + 1, s[serial][i]);//如果当前节点不是子节点,则继续向下遍历,当前节点变成了父亲节点
}
}
int main(void)
{
int M, N;

scanf("%d%d", &N, &M);
for (int i = 0; i < M; i++)
{
int father;
int son_number;

scanf("%d%d", &father, &son_number);
//s[i].push_back = son_number;
for (int j = 0; j < son_number; j++)
{
int temp;
//每个父节点都存入他对应的子节点
scanf("%d", &temp);
s[father].push_back(temp);
}
}
dfs(0, 1);
for (int i = 0; i <= max_deep; i++)
if (i
9cd3
)
printf(" %d", leave[i]);
else
printf("%d", leave[i]);
//system("pause");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PAT