原文:http://blog.csdn.net/lanchunhui/article/details/50957608
这个代码有bug,count不知道是什么?有时间再优化
Python 数据结构与算法——拓扑排序
很多情况下,拓扑排序问题往往会出现在一些中等复杂程度的计算系统中。这方面最典型的例子莫过于软件安装了,现在大多数操作系统都至少会有一个自动安装软件组件的系统(Ubuntu Linux 系统中的 apt-get,CentOS Linux 系统中的 RPM,Mac OS X 系统中的 brew 等),这些系统会自动检测依赖关系中缺少的部分,并下载安装它们,对于这一类工作,相关组件就必须按照一定的拓扑顺序来安装。
DAG 分析
- (1)拓扑排序并不唯一
- (2)不含回路的有向图(有向无环图)——一定存在拓扑排序。
归简法解 DAG
归简法求解拓扑排序,第一直觉是先移除其中一个节点(后面会说,每次移除的都是当前拓扑结构中的入度为零的点,入度为 0 的含义不依赖其他任何节点,即可发生),然后解决其余 n-1 个节点的问题。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
对上图而言,我们使用邻接表的dict 形式进行表示:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10