📜  门| GATE CS Mock 2018 |设置 2 |问题 33(1)

📅  最后修改于: 2023-12-03 15:28:39.477000             🧑  作者: Mango

门 | GATE CS Mock 2018 |设置 2 |问题 33

本程序是 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$ 分别为图中边和顶点的数目。程序运行后返回一个列表,表示拓扑排序的结果,如果图中存在环则返回空列表。