参照:
http://blog.csdn.net/tanyujing/article/details/8555618
http://www.cnblogs.com/Anker/archive/2013/03/09/2951785.html
__author__ = 'Administrator'
#encoding=utf-8
def fastest_way(pointCost,leaveCost,firstEntryCost,finalLeaveCost,Cost,lineNo,lineSize):
"""
pointCost 记录在某个装配站的花费
leaveCost:离开某条装配线进行另一条装配线的花费 序列表示进入另一条装配线
firstEntryCost:第一次进行装配线的花费
finalLeaveCost:最后离开装配线的花费
Cost:记录在当前装配站能获取到的最小花费
lineNo:记录在当前装配站获取最小花费所要选择的上个装配线
lineSize:某条装配线有多少个装配站
"""
Cost[0][0]=firstEntryCost[0]+pointCost[0][0]
lineNo[0][0]=1
Cost[1][0]=firstEntryCost[1]+pointCost[1][0]
lineNo[1][0]=2
for index in xrange(1,lineSize):
Cost[0][index]=Cost[0][index-1]+pointCost[0][index]
lineNo[0][index]=1
Cost[1][index]=Cost[1][index-1]+pointCost[1][index]
lineNo[1][index]=2
if Cost[0][index]>Cost[1][index-1]+pointCost[0][index]+leaveCost[1][index-1]:
Cost[0][index]=Cost[1][index-1]+pointCost[0][index]+leaveCost[1][index-1]
lineNo[0][index]=2
if Cost[1][index]>Cost[0][index-1]+pointCost[1][index]+leaveCost[0][index-1]:
Cost[1][index]=Cost[0][index-1]+pointCost[1][index]+leaveCost[0][index-1]
lineNo[1][index]=1
minTime,lastLineNo=Cost[0][lineSize-1]+finalLeaveCost[0],1
#print minTime,Cost[1][lineSize-1]+finalLeaveCost[1]
if minTime>Cost[1][lineSize-1]+finalLeaveCost[1]:
minTime=Cost[1][lineSize-1]+finalLeaveCost[1]
lastLineNo=2
return minTime,lastLineNo
def printline(lineNo,Cost,index,lastLine):
"""
index,某装配站号
"""
print "站:{2},装配线:{0},花费:{1}".format(lastLine,Cost[lastLine-1][index],index)
if index!=0:
lastLine=lineNo[lastLine-1][index]
index-=1
printline(lineNo,Cost,index,lastLine)
else:
return;
if __name__=="__main__":
pointCost=[[7,9,3,4,8,4],[8,5,6,4,5,7]]
leaveCost=[[2,3,1,3,4],[2,1,2,2,1]]
firstEntryCost=[2,4]
finalLeaveCost=[3,2]
linesize=6
Cost=[ [ [] for digit in xrange(linesize) ] for out in xrange(2)]
lineNo=[ [ [] for digit in xrange(linesize) ] for out in xrange(2)]
#lineNo[0][1]=1
minTime,LastLineNo=fastest_way(pointCost,leaveCost,firstEntryCost,finalLeaveCost,Cost,lineNo,linesize)
print minTime,LastLineNo
print Cost[0],Cost[1]
printline(lineNo,Cost,linesize-1,LastLineNo)
中间错了好几次,总是结果跟别人的对不上。。
。。。。。