📅  最后修改于: 2023-12-03 15:10:07.189000             🧑  作者: Mango
拓扑排序是一种常见的有向无环图(DAG)排序算法,用于将有向无环图中的节点拓扑排序为线性序列。拓扑排序常常被用于构建代码编译顺序、任务调度等场景中。
拓扑排序的思路很简单,就是通过不断删除入度为0的顶点来实现。每次找到一个入度为0的顶点,将其从图中删除,并将与之相连的顶点的入度-1,直到图为空或不存在入度为0的顶点为止。若完成排序后还有剩余的顶点,则说明图中存在环。
下面是一个使用Python实现拓扑排序算法的代码示例:
from collections import deque
def topological_sort(graph):
# 首先建立字典来存储每个顶点的入度
in_degree = {node: 0 for node in graph}
# 遍历一次图,统计每个顶点的入度
for node in graph:
for neighbor in graph[node]:
in_degree[neighbor] += 1
# 将入度为0的顶点加入队列中
queue = deque([node for node in in_degree if in_degree[node] == 0])
# 依次遍历队列中的顶点,将其从图中删除并更新入度
result = []
while queue:
node = queue.popleft()
result.append(node)
for neighbor in graph[node]:
in_degree[neighbor] -= 1
if in_degree[neighbor] == 0:
queue.append(neighbor)
# 检查结果是否合法
if len(result) != len(graph):
raise ValueError("The graph contains a cycle")
return result
假设我们有以下图:
graph = {
"A": ["B", "C"],
"B": ["D"],
"C": ["D"],
"D": []
}
我们可以使用上述代码对其进行拓扑排序:
topological_sort(graph) # ["A", "C", "B", "D"]
拓扑排序是一种常见的有向无环图(DAG)排序算法,可以用于构建代码编译顺序、任务调度等场景中。这篇文章简单介绍了拓扑排序的思路,并给出了一个使用Python实现拓扑排序算法的代码示例。