📜  最小成本路径的Python程序

📅  最后修改于: 2021-04-27 18:52:49             🧑  作者: Mango

给定成本矩阵cost [] []和cost [] []中的位置(m,n),编写一个函数,返回从(0,0)到(m,n)的最小成本路径的成本。矩阵的每个单元代表遍历该单元的成本。到达(m,n)路径的总成本是该路径上所有成本(包括源和目标)的总和。您只能从给定单元格(即,给定单元格(i,j),单元格(i + 1,j),(i,j + 1)和(i + 1, j + 1)可以遍历。您可以假设所有成本都是正整数。

例如,在下图中,到(2,2)的最小成本路径是什么?

下图突出显示了成本最低的路径。路径是(0,0)–>(0,1)–>(1,2)–>(2,2)。路径成本为8(1 + 2 + 2 + 3)。

# Dynamic Programming Python implementation of Min Cost Path
# problem
R = 3
C = 3
  
def minCost(cost, m, n):
  
    # Instead of following line, we can use int tc[m + 1][n + 1] or
    # dynamically allocate memoery to save space. The following
    # line is used to keep te program simple and make it working
    # on all compilers.
    tc = [[0 for x in range(C)] for x in range(R)]
  
    tc[0][0] = cost[0][0]
  
    # Initialize first column of total cost(tc) array
    for i in range(1, m + 1):
        tc[i][0] = tc[i-1][0] + cost[i][0]
  
    # Initialize first row of tc array
    for j in range(1, n + 1):
        tc[0][j] = tc[0][j-1] + cost[0][j]
  
    # Construct rest of the tc array
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            tc[i][j] = min(tc[i-1][j-1], tc[i-1][j],
                            tc[i][j-1]) + cost[i][j]
  
    return tc[m][n]
  
# Driver program to test above functions
cost = [[1, 2, 3],
        [4, 8, 2],
        [1, 5, 3]]
print(minCost(cost, 2, 2))
  
# This code is contributed by Bhavya Jain
输出:
8

请参考有关动态编程的完整文章。设置6(最小成本路径)以获取更多详细信息!