Topological Sort - 拓扑排序


问题

对有向图进行拓扑排序。

解法

拓扑排序是深度优先搜索的典型应用。

遍历有向图的所有顶点做DFS搜索。对任意顶点做DFS搜索,直到无法继续搜索为止,搜索到的顶点数量即为的DFS距离。将所有顶点按照其DFS距离从大到小排序,即为所有顶点的拓扑排序。一个顶点的DFS距离至少为

对下图中的有向图进行拓扑排序:

TopologicalSort1.png

顶点的DFS距离为,DFS搜索顺序为,如下图;

TopologicalSort2.png

顶点的DFS距离为,DFS搜索顺序为,如下图;

TopologicalSort3.png

顶点的DFS距离为,DFS搜索顺序为,如下图;

TopologicalSort4.png

顶点的DFS距离为,DFS搜索顺序为

顶点的DFS距离为,DFS搜索顺序为

顶点的DFS距离为,DFS搜索顺序为

顶点的DFS距离为,DFS搜索顺序为

顶点的DFS距离为,DFS搜索顺序为

最终得到拓扑排序

每个顶点DFS搜索的时间复杂度为,拓扑遍历的时间复杂度为


Introduction To Algorithms


源码

TopologicalSort.h

TopologicalSort.cpp

测试

TopologicalSortTest.cpp