拓扑排序算法的基本思想
时间: 2023-12-10 12:35:54 浏览: 102
拓扑排序是一种对有向无环图进行排序的算法。其基本思想是从有向图中选一个入度为0的顶点输出,将此点和以它为起点的弧删除,重复上述两个步骤直到不存在入度为0的顶点。若此时输出的顶点数小于有向图的顶点数,则说明有向图中存在回路,否则输出的顶点的顺序即为一个拓扑序列。
拓扑排序算法的步骤如下:
1. 统计每个顶点的入度,将入度为0的顶点加入队列。
2. 取出队首顶点,输出该顶点,并将该顶点的所有邻接点的入度减1。
3. 若邻接点的入度为0,则将其加入队列。
4. 重复步骤2和3,直到队列为空。
下面是一个Python实现的例子:
```python
from collections import deque
def topological_sort(graph):
in_degree = {u: 0 for u in graph}
for u in graph:
for v in graph[u]:
in_degree[v] += 1
queue = deque([u for u in in_degree if in_degree[u] == 0])
result = []
while queue:
u = queue.popleft()
result.append(u)
for v in graph[u]:
in_degree[v] -= 1
if in_degree[v] == 0:
queue.append(v)
if len(result) != len(graph):
return None # 存在环
return result
```
阅读全文