【问题描述】给定有向图的adjacent list,写出其拓扑排序结果 【输入形式】节点数目n,和有向图的 adjacent list。每个节点i的adjacent list 表示为数组[i,x,x]; 如第0个顶点和第1,5个有有向边,表示为[0 1 5] 【输出形式】拓扑排序结果 【样例输入】 10 [0 6 1 4] [1 2] [2 7 5] [3 8] [4 5] [5 9] [6 3 2] [7 8] [8 9] [9 ] 【样例输出】[ 0 6 1 4 3 2 7 5 8 9] 【样例说明】 【评分标准】
时间: 2023-10-09 18:12:07 浏览: 76
有向图的拓扑排序
4星 · 用户满意度95%
下面是用 Python 实现的代码:
```
from collections import deque
def topological_sort(n, adj_list):
# 初始化入度为0的节点集合
zero_indegree = set(range(n))
# 统计每个节点的入度
indegree = [0] * n
for node, neighbor in adj_list.items():
for nei in neighbor:
indegree[nei] += 1
if nei in zero_indegree:
zero_indegree.remove(nei)
# 初始化结果列表和队列
result = []
queue = deque(zero_indegree)
# 依次取出入度为0的节点进行拓扑排序
while queue:
node = queue.popleft()
result.append(node)
for nei in adj_list[node]:
indegree[nei] -= 1
if indegree[nei] == 0:
queue.append(nei)
# 判断是否存在环
if len(result) < n:
return None
else:
return result
if __name__ == '__main__':
n = 10
adj_list = {
0: [6, 1, 4],
1: [2],
2: [7, 5],
3: [8],
4: [5],
5: [9],
6: [3, 2],
7: [8],
8: [9],
9: []
}
result = topological_sort(n, adj_list)
print(result)
```
输出为 `[0, 6, 1, 4, 3, 2, 7, 5, 8, 9]`,即为拓扑排序的结果。
阅读全文