前言
简单问题,写的不好,大佬见谅.
如有疏漏,恳请指正,小编垂首.
问题描述:
家谱树统计直系后代
问题解析:
- 统计直系后代数量,采用邻接表存储
- dfs算法
实现代码:
代码如下(示例):
#include<cstdio>
#include<vector>
using namespace std;
vector<int> son[10001];//邻接表
bool f[10001];//定义子
int ans[10001];//答案数组
int dfs(int u) {
int res = 0;
for (int i = 0; i < son[u].size(); i++) {
res += dfs(son[u][i]);
}
ans[u] = res;//答案数组
return res + 1;//加上自己
}
int main() {
int n,x,y,u;
scanf_s("%d", &n);//人数
for(int i=1;i<n;i++) {
scanf_s("%d%d", &x, &y);
son[x].push_back(y);
f[y] = true;
}
//根
for (int i = 1; i < n; i++) {
if (!f[i]) {
u = i;
}
}
dfs(u);
for (int i = 1; i <= n; i++) {
printf("%d\t%d\n", i, ans[i]);
}
return 0;
}
注意事项
返回子数加上自己,自己的子不包含自己
测试案例:
总结
数据结构要好好学呀!!!