量化编程笔试题拓扑排序

N个任务,编号从0开始,有依赖关系,prerequisites表示依赖,[i,j表示i依赖j的完成,输出任务完成顺序的数组。比如输入是4,[[1,0],[2,0],[3,1],[3,2]],输出是[0,2,1,3]

要接收输入的数字和数组,并根据给定的依赖关系输出任务完成顺序的数组,我们可以使用Python编写一个函数来实现这个功能。下面是一个示例函数,它接收任务的数量(数字N)和依赖关系数组(prerequisites),然后使用拓扑排序算法来确定任务的完成顺序。

from collections import defaultdict

def topological_sort(N, prerequisites):
    # 创建一个字典来存储每个任务的依赖列表
    dependency_graph = defaultdict(list)
    in_degree = [0] * N  # 存储每个任务的入度

    # 构建依赖图和计算入度
    for i, j in prerequisites:
        dependency_graph[j].append(i)  # j 依赖 i
        in_degree[i] += 1  # i 的入度增加

    # 找到所有入度为0的任务
    queue = [i for i in range(N) if in_degree[i] == 0]

    # 初始化结果列表
    sorted_order = []

    while queue:
        # 取出一个入度为0的任务
        current = queue.pop(0)
        sorted_order.append(current)  # 将其添加到完成顺序列表

        # 更新依赖图中与当前任务相邻的任务的入度
        for neighbor in dependency_graph[current]:
            in_degree[neighbor] -= 1
            if in_degree[neighbor] == 0:
                queue.append(neighbor)

    # 检查是否所有任务都被处理
    if len(sorted_order) == N:
        return sorted_order
    else:
        # 如果不是所有任务都被处理,则存在环,无法完成排序
        return "There is a cycle in the dependencies, no topological sorting is possible."

# 示例输入
N = 4
prerequisites = [[1, 0], [2, 0], [3, 1], [3, 2]]

# 调用函数并打印结果
print(topological_sort(N, prerequisites))

当你运行这段代码时,它会输出任务的完成顺序数组。对于给定的示例输入,输出将是`[0, 2, 1, 3]`,表示任务0应该首先完成,然后是任务2,接着是任务1,最后是任务3。这个顺序满足所有给定的依赖关系。如果存在环,则会返回一个错误消息,说明无法进行拓扑排序。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值