Вот мое решение с динамическим программированием в O(n^2)
вы начинаете с (1,1), так что вы можете найти, например, a = (1,2) и b = (2,1) по a = value (1,1) + value (1,2). Затем, чтобы найти (2,2), выберите минимум (a+ value(2,2)) and (b + value(2,2))
и продолжайте эту логику. Вы можете найти любую минимальную сумму среди (1,1) и (i, j) с этим алгоритмом. Позвольте мне объяснить,
Данная матрица
1 2 3
4 5 6
7 8 9
Кратчайший путь:
1 3 .
5 . .
. . .
чтобы найти (2,2), возьмите исходное значение (2,2) = 5 из заданной матрицы и выберите m in(5 + 5), 3 + 5) = 8
. так
Кратчайший путь:
1 3 6
5 8 .
12 . .
чтобы найти (3,2) выберите min (12 + 8, 8 + 8) = 16 and (2,3) = min(8 + 6, 6 + 6) = 12
Кратчайший путь:
1 3 6
5 8 12
12 16 .
так что последний (3,3) = min (12 + 9, 16 + 9) = 21
Кратчайший путь:
из (1,1) в любую точку (i, j)
1 3 6
5 8 12
12 16 21