python | 算法-拓扑排序
写在前面:
我自己用python练习算法与数据结构的典型算法汇总在这里:汇总-算法与数据结构-python版,欢迎翻阅!
1️⃣ 参考链接 :https://github.com/algorithmzuo/algorithmbasic2020/blob/master/src/class16/Code03_TopologySort.java
2️⃣ 所用例子 :
数据结构
与前章同:python | 算法-图的宽度优先遍历
拓扑排序算法
# 拓扑排序
# 适用于有向图+无环
class TopologicalOrder:
def topoSort_bfs(self, graph):
# 先建立以节点为键值,节点入度为值的映射表
indegree_map = {}
zero_degree_nodes = [] # 同时用队列记录下入度为0的节点
for _, node in graph.nodes.items():
indegree_map[node] = node.in_num
if node.in_num == 0:
zero_degree_nodes.append(node)
#开始进行拓扑排序,结果保存在数组中
results = [] # 保存输出的节点的值
while len(zero_degree_nodes) > 0:
cur = zero_degree_nodes.pop(0)
results.append(cur.value)
for next in cur.nexts:
indegree_map[next] -= 1
if indegree_map[next] == 0:
zero_degree_nodes.append(next)
# 返回值就是目标数组
return results
# test
matrix = [[0, 0, 1],
[0, 0, 2],
[0, 0, 3],
[0, 1, 4],
[0, 2, 4],
[0, 2, 5],
[0, 3, 4],
[0, 3, 5]]
generator = GraphGenerator()
graph = generator.createGraph(matrix)
topo_sort = TopologicalOrder()
sort_result = topo_sort.topoSort_bfs(graph)
print(str(sort_result))
# 输出
# [0, 1, 2, 3, 4, 5]
我自己用python练习算法与数据结构的典型算法汇总在这里:汇总-算法与数据结构-python版,欢迎翻阅!