2、拓扑排序 任务:编写函数实现图的拓扑排序。
时间: 2023-12-22 13:29:45 浏览: 157
拓扑排序是一种对有向无环图(DAG)进行排序的算法,它可以确定图中各个顶点之间的依赖关系。下面是一个实现图的拓扑排序的函数示例:
```python
from collections import deque
def topological_sort(vertices, edges):
# 创建邻接表
adjacency_list = [[] for _ in range(vertices)]
in_degree = [0] * vertices
# 构建邻接表和入度数组
for edge in edges:
start, end = edge
adjacency_list[start].append(end)
in_degree[end] += 1
# 将入度为0的顶点加入队列
queue = deque()
for i in range(vertices):
if in_degree[i] == 0:
queue.append(i)
# 拓扑排序结果
result = []
# BFS遍历
while queue:
vertex = queue.popleft()
result.append(vertex)
# 更新邻接顶点的入度
for adj_vertex in adjacency_list[vertex]:
in_degree[adj_vertex] -= 1
if in_degree[adj_vertex] == 0:
queue.append(adj_vertex)
# 判断是否存在环
if len(result) != vertices:
return "图中存在环,无法进行拓扑排序。"
else:
return result
```
使用该函数可以实现图的拓扑排序。你需要提供顶点数和边数,并以列表的形式提供各个顶点之间的边关系。函数将返回拓扑排序的结果,如果图中存在环,则返回"图中存在环,无法进行拓扑排序。"。
阅读全文