Python递归解决AOE网络最长路关键路径的问题
一鼓作气,再来一发
这是某同学在某公司的宣讲会中笔试部分的一题,如下图:
如图:每一个项目都有完成时间和若干个前置条件,求总项目(或每一个项目)的最短完成时间。
上代码:
class Pro:
def __init__(self,pro_id,require_time,previous,pro_list):
self.pro_id = pro_id
self.require_time = require_time
self.previous = previous
#self.status = False
pro_list.append(self)
# def Test(self):
# for item in self.previous:
# if pro_list[item].status == False:
# return False
# return True
def ShowSelf(self):
print self.id,self.require_time,self.previous,#self.status,
# def Pro_Finish(self):
# self.status = True
def run(self):
total = 0
tmp = []
if self.pro_id == 0:
return 0
a = len(self.previous)
for x in range(a):
tmp.append(pro_list[self.previous[x]].run() + self.require_time)
print tmp
total = max(tmp)
print total
return total
pro_list = []
pro_0 = Pro(0, 0, [0], pro_list)
# pro_0.status = True
#init the pro_list
pro_1 = Pro(1, 4, [0], pro_list)
pro_2 = Pro(2, 3, [1], pro_list)
pro_3 = Pro(3, 2, [1], pro_list)
pro_4 = Pro(4, 5, [2], pro_list)
pro_5 = Pro(5, 3, [3,4,8], pro_list)
pro_6 = Pro(6, 1, [4], pro_list)
pro_7 = Pro(7, 3, [5,6], pro_list)
pro_8 = Pro(8, 5, [1], pro_list)
pro_9 = Pro(9, 4, [7], pro_list)
total_time = pro_9.run() #此处为总项目,也可以是单个项目
print "Total_time:",total_time
运行结果:
[4]
4
[6]
6
[4]
4
[7]
7
[12]
12
[4]
4
[9]
9
[9, 15, 12]
15
[4]
4
[7]
7
[12]
12
[13]
13
[18, 16]
18
[22]
22
Total_time: 22