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

来源:互联网 发布:k线选股软件 编辑:程序博客网 时间:2024/06/01 08:53

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

一鼓作气,再来一发

这是某同学在某公司的宣讲会中笔试部分的一题,如下图:


如图:每一个项目都有完成时间和若干个前置条件,求总项目(或每一个项目)的最短完成时间。

上代码:

class Pro:def __init__(self,pro_id,require_time,previous,pro_list):self.pro_id = pro_idself.require_time = require_timeself.previous = previous#self.status = Falsepro_list.append(self)# def Test(self):# for item in self.previous:# if pro_list[item].status == False:# return False# return Truedef ShowSelf(self):print self.id,self.require_time,self.previous,#self.status,# def Pro_Finish(self):# self.status = Truedef run(self):total = 0tmp = []if self.pro_id == 0:return 0a = len(self.previous)for x in range(a):tmp.append(pro_list[self.previous[x]].run() + self.require_time)print tmptotal = max(tmp)print totalreturn totalpro_list = []pro_0 = Pro(0, 0, [0], pro_list)# pro_0.status = True#init the pro_listpro_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


1 0
原创粉丝点击