gpt4 book ai didi

java - 通过矩阵的最小成本

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:11:47 24 4
gpt4 key购买 nike

Matrix:
6 9 3
4 8 2
3 5 10

您可以从第一行的任何整数开始,您只能沿着矩阵向下添加左、右或直接在前一个数字的下方。例如,您从 9 开始,您可以转到 4,8 或 2。我想出了如何获得结果矩阵

Matrix:
6 9 3
10 11 5
13 10 15

最短路径显然是 3>2>5,对应于结果矩阵上的 3>5>10。我想将最便宜路径的坐标存储在 ArrayList 中。在这种情况下,它将是 [0,2,1,2,2,1]。这就是我目前所知道的。我的问题是您将值添加到 ArrayList 的什么位置?

     private static ArrayList<Integer> minCost(int cost[][])
{
ArrayList<Integer> minValues = new ArrayList<>();
int n = cost.length;
int m = cost[0].length;
int i, j;
int tc[][] = new int[m][n];

for (i = 0; i <= n - 1; i++) {
tc[0][i] = cost[0][i];
}


for (i = 1;i <= n - 1; i++) {
for (j = 0; j <= m - 1; j++) {
if(j ==0){
tc[i][j] = Math.min(tc[i - 1][j],
tc[i-1][j + 1])
+ cost[i][j];
}
else if(j == m-1){
tc[i][j] = Math.min(tc[i - 1][j - 1],
tc[i - 1][j])
+ cost[i][j];
}
else{
tc[i][j] = min(tc[i - 1][j - 1],
tc[i - 1][j],
tc[i-1][j + 1])
+ cost[i][j];
}

}
}
return minValues;
}

最佳答案

在生成整个总成本矩阵后,应将这些值添加到数组列表中,正如您已经完成的那样。

路径将向后重建,从底行中具有最小总成本的位置开始。这将是结果数组列表中的最后一对坐标。

之后,应确定其前身。这可以通过检查前一行中哪些相邻单元格的总成本与当前单元格的成本相加来生成所需的总成本来完成。

在提供的示例中,最佳路径必须在单元格 (2, 1) 的底部行结束,因为这是底部行总成本最低的单元格(其总成本为 10)。前一个单元格必须是具有 total_cost = 10 - cost(2, 1) = 5 的单元格。在第 1 行的相邻单元格中有一个具有此属性的候选单元格,即单元格 (1, 2)。

这个过程应该像这样继续下去,以相反的顺序一个一个地找到路径的单元格,直到路径完成(它到达第一行)。


一些说明:

  • 如果在某个时候有多个最佳前任候选者(两者的总成本相同),则可以选择其中任何一个。他们每个人都会生成一条最优路径,总成本相同。

  • 要按所需顺序创建最终路径,可以将在每个步骤中找到的位置添加到数组的前面(以避免需要在最后执行反向操作)。

    <

关于java - 通过矩阵的最小成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43529403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com