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-3個相鄰值,而不是全部值,它是這些值的最小值。 – maraca
是的,謝謝,我添加了關鍵字「相鄰」來說清楚。 – qwertyman