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版,欢迎翻阅!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)