去除有向图中的环的python代码
时间: 2023-05-11 09:04:51 浏览: 199
以下是一个基于拓扑排序的 Python 代码,用于去除有向图中的环:
```python
from collections import deque
def remove_cycles(graph):
# 计算每个节点的入度
in_degrees = {node: 0 for node in graph}
for node in graph:
for neighbor in graph[node]:
in_degrees[neighbor] += 1
# 将入度为 0 的节点加入队列
queue = deque([node for node in graph if in_degrees[node] == 0])
# 依次删除队列中的节点及其出边
while queue:
node = queue.popleft()
for neighbor in graph[node]:
in_degrees[neighbor] -= 1
if in_degrees[neighbor] == 0:
queue.append(neighbor)
del graph[node]
# 如果还有节点剩余,说明存在环
if graph:
raise ValueError("The graph contains a cycle")
return graph
```
该函数接受一个字典表示的有向图,返回去除环后的有向无环图。如果图中存在环,将抛出 ValueError 异常。
阅读全文