定义
一共有好多件事情
事情A要再事情B(或者更多)事情做完才能做
然后排序!
(有向无环图)
思路
一个网上找的图便于理解(下列过程以此图为例)

- 记录所有点的入度和出度
- 找到入度为0的点加入栈中 为a
- 栈顶元素输出删除并把与栈顶元素相连的点的入度减一
- 删除过程中如果有入度为零的点也加入栈中
直到输出的数等于n完成排序
PS:如果输出的数小于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
代码

本文介绍了拓扑排序的概念,通过一个具体的家谱树问题阐述了其思路和解决方法。首先,定义了拓扑排序是基于有向无环图的排序过程,接着,解释了如何通过计算节点的入度和出度进行排序,当出现入度为0的节点时将其加入栈中,并更新其他节点的入度。文章通过一个实例展示了如何将这个思路应用于家谱树的排序,输出满足辈分关系的序列。最后,给出了输入输出样例及解决方案。
最低0.47元/天 解锁文章
8429

被折叠的 条评论
为什么被折叠?



