头歌 第1关:拓扑排序的实现 python
时间: 2023-07-23 20:26:35 浏览: 225
拓扑排序的实现
好的,这是一个关于拓扑排序的 Python 实现:
```python
from collections import deque
def topo_sort(graph):
"""
:param graph: dict, 图的邻接表表示
:return: list, 拓扑排序结果
"""
in_degree = {u: 0 for u in graph} # 记录每个节点的入度
for u in graph:
for v in graph[u]:
in_degree[v] += 1
q = deque([u for u in in_degree if in_degree[u] == 0]) # 找到所有入度为0的节点
result = []
while q:
u = q.popleft()
result.append(u)
for v in graph[u]:
in_degree[v] -= 1
if in_degree[v] == 0:
q.append(v)
if len(result) != len(graph):
# 图中存在环
return None
return result
```
这个函数接受一个邻接表表示的图,返回一种拓扑排序结果。如果图中存在环,则返回 `None`。
阅读全文