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

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


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值