您的位置:首页 > 理论基础 > 计算机网络

Python递归解决AOE网络最长路关键路径的问题

2015-04-16 15:28 1381 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 递归 AOE网络