У меня задача Задача - получить самую низкую стоимость пути. Путь может проходить по горизонтали или по диагонали. не вертикально. как показано ниже. и первая и последняя строки также смежны.Как найти Путь наименьшей стоимости в 2D-матрице
для примера см ниже матриц:
output for 1st matrix :
16
1 2 3 4 4 5-->path row number
output for second matrix:
11
1 2 1 5 4 5-->path row number
делает это в Java, я получаю самый низкий путь, но я не получает путь для печати пути, используя строку номера.
int minCost(int cost[r][r], int m, int n)
{
if (n < 0 || m < 0)
return Integer.MAX_VALUE;;
else if ((m == r-1 && n == c-1)|| n+1>=c)
return cost[m][n];
else
return cost[m][n] + min(minCost(cost, m+1>=r?r-1:m+1,n+1),
minCost(cost, m,n+1),
minCost(cost, m-1>=0?m-1:r-1,n+1));
}
// calling it
minCost(cost, 0, 0);
Как получить номера строк для кратчайшего пути?
Этот алгоритм работает в 'O (3^r)'. Более эффективный подход будет выполнять итерацию по столбцу матрицы по столбцу и вычисление затрат столбца для следующего столбца из предыдущего столбца. Или, альтернативно, используя динамическое программирование. Оба подхода могут быть выполнены для запуска в «O (min (c, r) * c)». – fabian
, если вы не добры, не могли бы вы объяснить больше –