某车间生产三种不同的产品,不同产品可以同时开始生产,三种产品按照不同的部件顺序完成。如“产品0”制作顺序是“部件1”→“部件0”,即“部件1”完成后才可以开始“部件0”,即部件1是部件0的前驱部件,每个部件仅有一个前驱部件,如图a所示。每个部件自身又需同编号的1个材料完成才能开始生产,如“部件0”需要“材料0”,“部件1”需要“材料1”……,各种材料按各自的开始生产时刻进行,完成所需时长也有所不同,如下表所示,部件完成所需时长不包括材料生产在内。现编写程序,模拟该生产过程,并计算每个产品的部件完成的时刻。
产品 0:部件1→部件0
产品1:部件2→部件4→部件3
产品号 | 部件顺序 | 材料生产开始时刻 | 材料生产所需时长 | 部件完成所需时长 |
产品0 | 部件1 | 3 | 3 | 2 |
部件0 | 2 | 2 | 1 |
产品1 | 部件 2 | 3 | 2 | 2 |
| 部件4 | 4 | 1 | 3 |
部件3 | 9 | 2 | 2 |
(1)若有2个产品,“产品0”由“部件1”→“部件0”完成,“产品1”由“部件2”→“部件4”→“部件3”完成,所需材料开始生产时刻和完成所需时长如表所示。经计算产品0的完成时刻是9,请回答产品 1完成的时刻是
____(2)若arr=[[0,-1],[1,0],[2,4],[3,-1],[4,3]],arr[i][0]表示arr[i][1]的前驱部件,arr[i][1]为-1时表示arr[i][0]为某个产品中最后的部件。可通过pre函数提炼出每个产品所需的第一个部件。
def pre(arr):
i = 0;j = i +1;flag = True
h=[]
while i < len(arr):
if j < len(arr)and arr[i][0]!= arr[j][1]:
j+=1
else:
if j==len(arr)or not flag:
if flag==True:
h.append(arr[i][0])
i += 1;j= 0
flag = True
return h
path= [[0,-1],[1,0],[2,4],[3,-1],[4,3]],现调用该函数,pre(path),则加框处代码执行
____次
(3)编写程序计算每个部件完成的时刻。
'''
部件数据存cmpt列表,cmpt[i][0]存“部件i”完成所需时长,cmpt[i][1]初始均为-1
材料数据存mate列表,mate[i][0]存“材料i”开始时刻, mate[i][1]存完成“材料i”所需时长
部件顺序关系存入path数据, path[i][0]表示path[i][1]的前驱部件代码略
'''
n=len(cmpt)
#表示共有n个部件
head = pre(path)
c=[]
nl = len(path)
for i in range(nl):
①____ cmpt[k][1]=path[i][1]
for i in range(len(head)):
②____ curtime = 0
while p!= -1:
t=mate[p][0] + mate[p][1]
if t> curtime:
curtime =t+ cmpt[p][0]
else:
③____ c.append([p,curtime])
#c列表存储部件编号和该部件完成的时刻
p= cmpt[p][1]
#按先后顺序输出每个产品的各个部件完成的时刻,代码略