Sudipta Ghosh Ответов: 2

Как найти путь с наименьшей стоимостью в матрице 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));
    }
}

2 Ответов

Рейтинг:
2

Patrice T

Эта программа предназначена для вычисления минимальной стоимости на матрице, но ничего больше.
В этом коде нет положения о том, чтобы указать путь минимальной стоимости, только его значение.

Я боюсь, что вам придется немного поработать и сделать программу, которая проверяет все возможные пути, пока вы не найдете тот, который имеет минимальную стоимость.

Nota: Java знает длину массивов, в

public static int minimumCostPathDP(int[][] costMatrix, int m, int n)
, m и n можно вывести из costMatrix

Цитата:
Код, прилагаемый здесь, я нашел в интернете. Пожалуйста, предоставьте мне фрагмент, чтобы напечатать путь.
Пахнет домашним заданием!
Похоже, вы хорошо умеете искать в интернете, теперь пришло время работать самостоятельно.


Рейтинг:
1

Maciej Los

Если вы хотите узнать, как печатать диаграмму, проверьте это:
Алгоритм кратчайшего пути Дейкстры в Java-учебник[^]
Java-программа для поиска кратчайшего пути между двумя вершинами с помощью алгоритма Дейкстры-Sanfoundry[^]
Не стесняйтесь реализовать свой собственный метод печати "диаграммы".