📅  最后修改于: 2023-12-03 15:28:39.477000             🧑  作者: Mango
本程序是 GATE 计算机科学模拟考试 2018 年设置 2 的第 33 题,考察对于数据结构和算法的理解。程序主要实现了对一个有向图的拓扑排序,如果图中存在环则返回空列表。本程序使用 Python 语言编写,下面是程序实现的代码片段。
def topological_sort(graph):
in_degree = { u : 0 for u in graph } # 初始化每个顶点的入度为 0
for u in graph:
for v in graph[u]:
in_degree[v] += 1 # 计算每个顶点的入度
queue = [u for u in in_degree if in_degree[u] == 0] # 所有入度为 0 的顶点入列
result = []
while queue:
u = queue.pop(0) # 出列一个顶点
result.append(u)
for v in graph[u]:
in_degree[v] -= 1 # 将与其相邻的点的入度减一
if in_degree[v] == 0:
queue.append(v) # 若该点所有相邻的点的入度均为 0,则加入队列中
if len(result) != len(graph):
return [] # 如果存在环,则返回空列表
else:
return result # 否则返回拓扑排序的结果
以上代码实现了图的拓扑排序算法,时间复杂度为 $O(E+V)$,其中 $E$ 和 $V$ 分别为图中边和顶点的数目。程序运行后返回一个列表,表示拓扑排序的结果,如果图中存在环则返回空列表。