Найдите путь LowCost и распечатайте - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь распечатать путь для скрипта LowCost. Я нашел здесь код Найти 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 голосов
/ 13 июня 2018

хорошо, теперь понимаю, как это работает, мне нужно сохранить список в функции, а функция self возвращает список без значения, и после того, как я добавлю новый элемент :), вот так теперь я могу получить путь и карту, где он находится в списке, номер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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...