现已对该工程的依赖关系进行了梳理,结果如图b所示,标记“T”表示依赖关系需保留,标记“F”表示依赖关系需删除。
根据每个任务完成所需的天数和梳理后的依赖关系,编写程序,首先删除标记为“F”的依赖关系,然后计算工程最快完成所需的天数,并以工程最快完成所需的天数为期限,计算每个任务最晚必须开始的时间。
图a |
图b |
请回答下列问题:
def erase(lst):
i=0
j = len(lst)-1
while i<= j:
if lst[i][2]== 'T':
i+=1
else:
if lst[j][2] == 'T':
lst[i]=lst[j]
i + = 1
j - = 1
return i
若lst列表依次存储图b所示的依赖关系,如lst[0]为[0,5,'T'],调用erase(Ist)的数,则语句“lst[i] =lst[j]”的执行次数为。
def proc(n, lst,task):
pr=[0]*n
w=[0]* n # w[i]存放任务1最晚必须开始的时间
m=erase(lst)
for i in:
task[lst[i][1]][1] =lst[i][0]
pr[lst[i][0]] =1
c=[]
days= 0 # days存放工程最快完成所需的天数
for i in range(n):
if pr[i]==0:
k = i
s = 0
while k!= -1:
c.append(k)
s += task[k][0]
if s > days:
days=s
for i in range(n-1,-1,-1):
k =c[i]
if task[k][1] == -1:
w[k] = days-task[k][0]+1
else:
# 输出days,以及保存在w中的每个任务最晚必须开始的时间,代码略
'''
工程包含的任务数存入变量n
任务间的依赖关系存入lst列表
lst[0]包含3项,任务1st[i][0]依赖于任务lst[i][1],lst[i][2]存放保留/删除标记,任务数据存入task列表task[i]包含2项,task[i][0]为完成任务主所需天数,task[i][1]的初值为-1
代码略
'''
proc(n,lst,task)