1351:【例4-12】家谱树

简介: 1351:【例4-12】家谱树

1351:【例4-12】家谱树

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

有个人的家族很大,辈分关系很混乱,请你帮整理一下这种关系。

给出每个人的孩子的信息。

输出一个序列,使得每个人的后辈都比那个人后列出。

【输入】

第1行一个整数N(1≤N≤100),表示家族的人数;

接下来N行,第i行描述第i个人的儿子;

每行最后是0表示描述完毕。

【输出】

输出一个序列,使得每个人的后辈都比那个人后列出;

如果有多解输出任意一解。

【输入样例】

5

0

4 5 1 0

1 0

5 3 0

3 0

【输出样例】

2 4 5 3 1

1. // 示例代码  拓扑排序算法
2. #include <iostream>
3. #include <stack>
4. #include <vector>
5. using namespace std;
6. 
7. const int N = 105; // 定义常量 N,表示数组大小
8. int n, a, c[N], r[N]; // n:图的结点数量,a:当前读入的边的终点序号,c 数组记录每个结点的出度,r 数组记录每个结点的入度
9. vector<int> vn[N]; // 邻接表,记录每个结点的所有后继结点
10. stack<int> ans; // 记录拓扑排序的结果,栈顶的元素表示拓扑排序中最先被访问的结点
11. 
12. int main() {
13.     cin >> n;
14. for (int i = 1; i <= n; i++) { // 读入图的邻接表,计算每个结点的入度和出度
15. while (cin >> a) {
16. if (a == 0) break; // 遇到 0,表示 i 结点的邻接链表读取完毕
17.             vn[i].push_back(a); // 将 i 的一个邻接结点 a 添加到邻接表中
18.             c[i]++; // i 的出度加一
19.             r[a]++; // a 的入度加一
20.         }
21.     }
22. 
23. for (int i = 1; i <= n; i++) // 找到所有入度为 0 的初始结点,放入拓扑排序的起点集合
24. if (!r[i]) ans.push(i);
25. 
26. while (!ans.empty()) { // 对起点集合中的每个结点进行拓扑排序
27. int t = ans.top(); // 取出栈顶的结点作为当前要访问的结点
28.         cout << t << " "; // 输出该结点
29.         ans.pop(); // 将该结点从栈中弹出
30. for (int i = 0; i < c[t]; i++) {
31.             r[vn[t][i]]--; // 后继结点的入度减一
32. if (r[vn[t][i]] == 0) // 如果该后继结点的入度已经为 0,则将其添加到起点集合中
33.                 ans.push(vn[t][i]);
34.         }
35.     }
36. 
37. return 0;
38. }


相关文章
|
人工智能 前端开发 JavaScript
合理使用WebStorm-环境配置篇(下)
合理使用WebStorm-环境配置篇(下)
合理使用WebStorm-环境配置篇(下)
如何获取与设置光标在input框的位置
如何获取与设置光标在input框的位置
如何获取与设置光标在input框的位置
|
人工智能 监控 安全
自学记录鸿蒙 API 13:骨骼点检测应用Core Vision Skeleton Detection
骨骼点检测技术能够从图片中识别出人体的关键骨骼点位置,如头部、肩部、手肘等,广泛应用于运动健身指导、游戏交互、医疗辅助、安全监控等领域。我决定深入学习HarmonyOS Next API 13中的Skeleton Detection API,并开发一个简单的骨骼点检测应用。通过理解API核心功能、项目初始化与配置、实现检测功能、构建用户界面,以及性能优化和功能扩展,逐步实现这一技术的应用。未来计划将其应用于健身指导和智能监控领域,探索与其他AI能力的结合,开发更智能的解决方案。如果你也对骨骼点检测感兴趣,不妨一起进步!
523 9
|
算法 Java C语言
【数据结构】后缀(逆波兰)表达式的计算以及中缀转后缀的方法
【数据结构】后缀(逆波兰)表达式的计算以及中缀转后缀的方法
4569 1
|
存储 分布式计算 Hadoop
Spark编程实验一:Spark和Hadoop的安装使用
Spark编程实验一:Spark和Hadoop的安装使用
|
存储 算法
【数据结构】3个例题带你理解图的遍历:深度优先搜索
【数据结构】3个例题带你理解图的遍历:深度优先搜索
3084 0
【数据结构】3个例题带你理解图的遍历:深度优先搜索
|
机器学习/深度学习 人工智能 编解码
AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼 ⛵
随着Diffusion Model的普及,AI绘画只需要你输入文本描述,模型就能在几分钟内生成精准匹配的精美图像。本文从使用步骤、费用和商用等角度对3个主流平台进行比较:DALL·E2、Midjourney、Stable Diffusion。
3278 2
AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼 ⛵
|
SQL 存储 Oracle
一文带你了解MySQL之用户和权限原理
在学习这一章节的时候,我们可以先了解一下SQL语言,SQL语言共分为四大类: 数据查询语言DQL(Data QueryLanguage):select 等 数据操纵语言DML(database manage language):insert update delete 等 数据定义语言DDL(Data Definition Language): create drop alter runcate 等 数据控制语言DCL(Data Control Language): grant revoke commit rollback 等 本文会频繁使用到DCL 数据控制语言
664 0
时钟频率是干什么的?底层原理是什么?
时钟频率是干什么的?底层原理是什么?
1301 0
|
Web App开发 移动开发 前端开发
前端数据可视化插件(一)图表
前端数据可视化插件(一)图表
前端数据可视化插件(一)图表

热门文章

最新文章