最小花费路径(MCP)
给定一个矩阵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)。
1)最优子结构
的路径到达(M,N)必须通过3格子中的一个:(M-1,N-1)或(m-1,n)或(M,N-1)。 到达(M,N),所以最小的花费路径可以写成“3个格子最小的 加[M] [N]的花费”。
minCost(m, n) = min (minCost(m-1, n-1), minCost(m-1, n), minCost(m, n-1)) + cost[m][n]
2)重叠子问题
以下是直接的递归实现的最小花费路径的问题,用的上面的递归函数。
<