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版,欢迎翻阅!
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号