基于入度的拓扑排序(Kahn's Algorithm)
来源:互联网 发布:新浪微博微数据 编辑:程序博客网 时间:2024/04/29 13:55
本文中的图用邻接链表来表示
拓扑排序只针对于有向无环图(DAG)才能完成,所以可以利用拓扑排序来判断一个有向图是否有环。
某一点的入度:图中指向该顶点的边的个数
图1 :DAG
以上图简单说明,点0的入度即为2。下面介绍拓扑排序的算法流程:
Step 1:计算出所有顶点的入度。
Step2 :将所有入度为0的点加入到一个队列。
Step3 :将队头元素取出,然后pop()。
1.count变量表示访问过的顶点个数,将count加1.
2.用top数组将每一次出队的元素保存起来。
3.将这个点的所有相邻点的入度减一,如果某个相邻点的入度减小为0,则将这个相邻点加入到队列中。
Step4 :重复Step3直到队列为空
Step5 :如果count和顶点个数相同,则将top数组中的元素按序输出就是排序后的结果;如果count不等于顶点个数
(在不相等的情况下,一般是count大于顶点个数),说明图中存在环,拓扑排序无法完成。
入度的计算方法:
遍历所有的顶点,每一次遍历,将该点所有相邻的点的入度都加1。所有的点遍历完后,入度就计算完成了。
具体拓扑排序代码如下:
结果是:4 5 2 0 3 1
1 0
- 基于入度的拓扑排序(Kahn's Algorithm)
- Kahn算法-拓扑排序
- 拓扑排序:Kahn算法
- 拓扑排序-Kahn算法
- 拓扑排序(Kahn算法和基于DFS求解法)
- 【算法设计与数据结构】拓扑排序算法的实现——Kahn算法及基于dfs的算法
- hdu 1285 基于入度数排序输出的拓扑排序
- 拓扑排序--入度
- 拓扑排序的两种实现--基于dfs和基于入度
- HDU-1258(拓扑排序Kahn算法)
- 拓扑排序+入度检测
- 拓扑排序的两种实现:Kahn算法和dfs算法
- 分别使用Kahn和DFS实现拓扑排序
- hdu1285确定比赛名次(拓扑排序kahn算法)
- 基于DFS的拓扑排序
- 基于队列的拓扑排序
- 基于DFS的拓扑排序
- poj 2762 Tarjan+拓扑排序 入度为1的集合的个数
- Vim 怎样做不放弃
- C++第五次作业
- 内部类
- 记录两个python的小问题
- java数据结构-HashMap
- 基于入度的拓扑排序(Kahn's Algorithm)
- 微信的平台搭建java http://blog.csdn.net/gebitan505/article/details/44595265
- NEU 1694 Primorial vs LCM 【数学】
- 软件工程(七)
- C语言深度解剖读书笔记
- LeetCode:Missing Number
- B
- 自定义控件——水波纹
- asp.net和asp的区别