【发布时间】:2016-12-05 12:58:40
【问题描述】:
我有一个挑战,目标是获得最低的路径成本。 该路径可以水平或对角线进行。不是垂直的。如下所示。 而且第一行和最后一行也是相邻的。
例如见下面的矩阵:
output for 1st matrix :
16
1 2 3 4 4 5-->path row number
output for second matrix:
11
1 2 1 5 4 5-->path row number
我在 java 中做这件事,我得到的是最低路径,但没有得到使用行号打印路径的路径。
int minCost(int cost[r][r], int m, int n)
{
if (n < 0 || m < 0)
return Integer.MAX_VALUE;;
else if ((m == r-1 && n == c-1)|| n+1>=c)
return cost[m][n];
else
return cost[m][n] + min( minCost(cost, m+1>=r?r-1:m+1,n+1),
minCost(cost, m,n+1),
minCost(cost, m-1>=0?m-1:r-1,n+1));
}
// calling it
minCost(cost, 0, 0);
如何获取最短路径的行号?
【问题讨论】:
-
此算法在
O(3^r)中运行。更有效的方法是逐列遍历矩阵并从前一列计算下一列的列成本。或者使用动态编程。这两种方法都可以在O(min(c, r) * c)中运行。 -
如果您不友好,请您解释一下
标签: java arrays algorithm shortest-path