Как найти путь с наименьшей стоимостью в матрице mxn
У меня есть матрица mXn, начиная с ячейки [0][0], мне нужно перейти к ячейке [m][n] по наименьшему возможному пути затрат, где затраты-это значения ячеек (целое число, больше 0). Возможны только движения вправо, вниз и по диагонали вниз.
Я пробовал подход динамического программирования, чтобы найти самую низкую стоимость, но не смог напечатать путь.
например, для матрицы {(3,2,8),(1,9,7),(0,5,2),(6,4,3)} он дает стоимость как 11, но поскольку мой подход преобразует матрицу в матрицу затрат, путь печатается неправильно.
ожидаемый результат:
стоимость: 11
путь: B B D R (то есть движения обхода, ниже, вниз, Rigth)
Код, прилагаемый здесь, я нашел в интернете. Пожалуйста, предоставьте мне фрагмент, чтобы напечатать путь.
Что я уже пробовал:
public static int minimumCostPathDP(int[][] costMatrix, int m, int n) { int[][] minimumCostPath = new int[m+1][n+1]; minimumCostPath[0][0] = costMatrix[0][0]; for (int i = 1; i <= m; i++) { minimumCostPath[i][0] = minimumCostPath[i - 1][0] + costMatrix[i][0]; } for (int j = 1; j <= n; j++) { minimumCostPath[0][j] = minimumCostPath[0][j - 1] + costMatrix[0][j]; } for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { minimumCostPath[i][j] = costMatrix[i][j] + minimum(minimumCostPath[i - 1][j - 1], minimumCostPath[i - 1][j], minimumCostPath[i][j - 1]); } } return minimumCostPath[m][n]; } public static int minimum(int a, int b, int c) { return Math.min(a, Math.min(b, c)); } public static void main(String[] args) { int[][] costMatrix = { { 3, 2, 8 }, { 1, 9, 7 }, { 0, 5, 2 }, {6, 4, 3} }; System.out.println("Minimum cost: " + minimumCostPathDP(costMatrix, 3, 2)); } }