我必须编写代码来解决这个问题。但首先,我必须为它提出一个算法。我不知道该怎么做。以下是我正在考虑的问题和问题:
加拿大航天局(CSA)与他们的竞争 美国和俄罗斯的同行(美国国家航空航天局和Roscosmos,分别是)将第一名男子降落在该地区 火星。他们将计划分解为n个任务,每个任务只需要一天。每个任务都可以 只有在所有先决条件任务完成后才能启动。显然,没有循环依赖 任务之间。 CSA需要您的帮助来确定所需的最少天数 完成计划。
我们得到一个包含每个任务先决条件的列表,因此我知道哪个任务具有哪个先决条件。例如。像[[1,2,3],[],[],[]]
这样的列表意味着任务0具有先决条件1,2,3而其他3个任务没有先决条件。
我在想的是检查每个列表并检查它是否是0长度。如果是,则将日计数增加1.如果不是,则迭代先决条件并查看是否可以执行任何操作。如果任何先决条件具有先决条件,我必须先做。
我理解这个理论,我根本不知道如何实现这个。我需要以某种方式跟踪我完成的先决条件,然后从任何将其作为要求的任务中删除这些先决条件。我知道我可以创建一个列表,但如果列表输入文件非常大,则需要很长时间,而且我的算法必须在1秒内返回输入。
任何帮助搞清楚这个算法的人都会非常感激。
答案 0 :(得分:0)
这是一个非常标准的树/图问题。考虑构建一个将所有独立任务作为叶子的数据结构,并且它们的节点是依赖于它们的任务。然后,您应该能够进行搜索,以计算在树上的水平向上移动时的天数总和。
您的节点可能如下所示:
class node(object):
def __init__(children)
self.children = children
def days_to_complete()
days = 1
for child in children:
days += child.days_to_complete()
return days
请注意,此课程不考虑交叉依赖关系,但我不会为您解决您的作业;)