【发布时间】:2017-09-17 16:06:03
【问题描述】:
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;
}
【问题讨论】:
标签: java algorithm matrix dynamic-programming minimum