拓扑排序用于有向无环图,通过Kahn算法实现:先统计入度,将入度为0的节点入队,依次处理节点并更新邻居入度,最终得到线性序列;若结果包含所有节点则排序成功,否则存在环。

拓扑排序用于有向无环图(DAG),可以找出节点的线性顺序,使得对于每一条有向边 (u, v),u 在排序中都出现在 v 的前面。Python 中可以通过 BFS(广度优先搜索)结合入度表来实现,常用于任务调度、依赖关系处理等场景。
使用 Kahn 算法进行拓扑排序:
from collections import deque, defaultdict
<p>def topological_sort(edges, n):</p><h1>建图并统计入度</h1><pre class='brush:python;toolbar:false;'>graph = defaultdict(list)
indegree = [0] * n
for u, v in edges:
graph[u].append(v)
indegree[v] += 1
# 找出入度为 0 的节点
queue = deque([i for i in range(n) if indegree[i] == 0])
result = []
while queue:
node = queue.popleft()
result.append(node)
for neighbor in graph[node]:
indegree[neighbor] -= 1
if indegree[neighbor] == 0:
queue.append(neighbor)
# 如果结果长度等于节点数,说明无环
if len(result) == n:
return result
else:
return [] # 存在环,无法拓扑排序edges = [(0, 1), (0, 2), (1, 2), (2, 3)] n = 4 order = topological_sort(edges, n) print("拓扑排序结果:", order) # 输出: [0, 1, 2, 3]
拓扑排序适用于:
立即学习“Python免费学习笔记(深入)”;
注意点:
基本上就这些,掌握建图、入度统计和队列处理就能应对大多数场景。
以上就是python中拓扑排序如何使用?的详细内容,更多请关注php中文网其它相关文章!
python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号