"""
设计:Python程序设计
作者:初学者
日期:2022年 04月 30日
"""
class DirectedMapNode:
def __init__(self, x):
self.label = x
self.neighbors = []
class Solution:
"""
参数graph:有向图节点列表
返回值:整数列表
"""
def top_sort(self, graph):
indegree = {}
for x in graph:
indegree[x] = 0
for i in graph:
for j in i.neighbors:
indegree[j] += 1
ans = []
for i in graph:
if indegree[i] == 0:
self.dfs(i, indegree, ans)
return ans
def dfs(self, i, indegree, ans):
ans.append(i.label)
indegree[i] -= 1
for j in i.neighbors:
indegree[j] -= 1
if indegree[j] == 0:
self.dfs(j, indegree, ans)
if __name__ == '__main__':
s = Solution()
g0 = DirectedMapNode(0)
g1 = DirectedMapNode(1)
g2 = DirectedMapNode(2)
g3 = DirectedMapNode(3)
g4 = DirectedMapNode(4)
g5 = DirectedMapNode(5)
g0.neighbors = [g1, g2, g3]
g1.neighbors = [g4]
g2.neighbors = [g4, g5]
g3.neighbors = [g4, g5]
graph = [g0, g1, g2, g3, g4, g5]
result = s.top_sort(graph)
print("输入:")
print("输出:", result)