找到LowCost路径并打印

时间:2018-06-11 16:26:12

标签: python printing dynamic-programming

我正在尝试打印我在这里找到代码的LowCost脚本的路径 Find LowCost我只改变了一些小东西。

脚本有效,但它只给我最后的费用;我也希望它能给我一条路径。

以下是一个例子:

[ [1, 2, 3],
  [4, 8, 2],
  [1, 5, 3] ]

所以这里看起来如何得到它的1,2,2,3:

1 - 2 3
..... \
4 8 2
...... |
1 5 3

我想打印纠正路径,如正确

path : [1,2,2,3]
low cost : 8

现在我得到一个非常大的路径结果而且它没有正确错误!

path : [1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 5, 5, 5]
low cost : 8

以下是代码:

import sys

def mymin(a,b,c):
    return min(min(a,b),c)

def minCostMain(cost, m, n):
    result = []

    def minCost(cost, m, n):
        if (n < 0 or m < 0):
           return sys.maxsize
        elif (m == 0 and n == 0):
           return  cost[m][n]
        else:
           t1= minCost(cost, m-1, n-1) 
           t2= minCost(cost, m-1, n)   
           t3= minCost(cost, m, n-1)   

           v=mymin(t1,t2,t3)

           #this dosen't work get more items     
           result.append(v)

           return cost[m][n] + v

    return minCost(cost, m, n),result

cost= [ [1, 2, 3],
        [4, 8, 2],
        [1, 5, 3] ]

lowcost,path= minCostMain(cost, 2, 2) 
print "path : " +  str(path)
print "low cost : " +  str(lowcost) 

1 个答案:

答案 0 :(得分:0)

好了,现在明白它的工作方式我需要保持列表中的功能和自我功能返回列表没有值,并在我添加新项目:)这样现在我可以得到路径和地图在哪里它#s; s列表中的数字1,2,2,3

import sys
def MyPrint(mlist):
    mlist[0]=str(mlist[0]) + " = (0,0)"
    sum=0
    for item in mlist:sum+=int(item.split(" = (")[0])
    print "*"*20    
    print "Sum = "+str(sum)
    print "*"*20
    print "map" 
    print "*"*20
    for item in mlist:print item

def Min(x,y, z):
    if (x[-1] < y[-1]):
        return x if (x[-1] < z[-1]) else z
    else:
        return y if (y[-1] < z[-1]) else z

def minCost(cost, m, n):
    if (n < 0 or m < 0):
        return [sys.maxsize]
    elif (m == 0 and n == 0):
        return [cost[m][n]]
    else:
        arr=Min(minCost(cost, m-1, n-1),
                minCost(cost, m-1, n),
                minCost(cost, m, n-1))

        arr.append(str(cost[m][n])+" = ("+str(m)+","+str(n)+")")

        return arr

cost= [ [1, 2, 3],
        [4, 8, 2],
        [1, 5, 3] ]
x=minCost(cost, 2, 2)      
MyPrint(x)

结果呢

********************
Sum = 8
********************
map
********************
1 = (0,0)
2 = (0,1)
2 = (1,2)
3 = (2,2)