给定成本矩阵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(最小成本路径)以获取更多详细信息!