java - 如何在二维矩阵中找到成本最低的路径

标签 java arrays algorithm shortest-path

我有一个挑战,目标是获得最低成本的路径。 该路径可以水平或对角线前进。不是垂直的。像下面。 并且第一行和最后一行也是相邻的。

enter image description here

例如见下面的矩阵:

enter image description here

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);

如何获取最短路径的行号?

最佳答案

您的算法效率很低。我能想到的最好的解决方案是向后计算(从右到左)。考虑第二个矩阵的右侧 2 列:

8 6
7 4
9 5
2 6 
2 3

如果现在我们在值为 8 的单元格上,下一步可以是 6/4/3。当然我们选择 3 是因为我们想要更小的成本。如果现在我们在值为 7 的单元格上,下一步可以是 6/4/5,我们将选择 4。因此两列可以合并为一列:

11   //8+3
11   //7+4
13   //9+4
5    //2+3
5    //2+3

现在重复最后两列:

2  11
2  11
9  13
3  5
1  5

最后将矩阵合并为一列,列中最小的值具有最低的成本。

关于java - 如何在二维矩阵中找到成本最低的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38682022/

相关文章:

java - 如何设计美观的Web应用程序

java - 为什么我不能使用 long 原语作为 switch() 部分的表达式?

php - 使用 Laravel 从数组中获取 JSON 值

Java 随机数生成器

java - 映射任务中的 ArrayIndexOutOfBound 异常

javascript - Jquery 每 2 秒用数组中的单词替换文本

java - 找到重叠部分的最大数量

c - 从 C 中的多维数组中获取列的有效方法是什么?

javascript - 生成一个简短的伪随机可验证字母数字代码

java - JWT token 在 java 中解析时总是抛出 ExpiredJwtException