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。这个顺序满足所有给定的依赖关系。如果存在环,则会返回一个错误消息,说明无法进行拓扑排序。