したがって、私は2次元マトリックスを持ち、最小コストを与えるパスを記録することになっています。私は下にまたは右に移動することができます。例:最小コストのための最適なグリッドパスの記録
2 4 1
3 7 6
3 8 9
Output: right right down down
私のコードは、間違った答えを与えますが、私はなぜそれを見つけることができません。以下のコードを添付しました。
public static List<String> optimalGridPath(int[][] grid) {
ArrayList<String> answers = new ArrayList<String>();
//TODO
int gridRows = grid.length-1;
int gridColumns = grid[0].length-1;
int solutionGrid[][] = new int[gridRows+1][gridColumns+1];
for (int i = 0; i <= gridRows; i++) {
for (int j = 0; j <= gridColumns; j++) {
if (i > 0 && j > 0)
solutionGrid[i][j] = grid[i][j] +
Math.min(solutionGrid[i-1][j], solutionGrid[i][j-1]);
else if (j == 0 && i == 0)
solutionGrid[i][j] = grid[i][j];
else if (j > 0)
solutionGrid[i][j] = grid[i][j] + solutionGrid[i][j-1];
else
solutionGrid[i][j] = grid[i][j] + solutionGrid[i-1][j];
}
}
while (gridRows != 0 && gridColumns != 0) {
if (gridColumns == 0) {
answers.add("down");
gridRows--;
}
else if (gridRows == 0) {
answers.add("right");
gridColumns--;
}
else {
if (solutionGrid[gridRows][gridColumns-1] <
solutionGrid[gridRows-1][gridColumns]) {
answers.add("right");
gridColumns--;
}
else {
answers.add("down");
gridRows--;
}
}
}
return answers;
}
ここで間違いを理解していないのはとても馬鹿です。ありがとう! –