给定一个所有整数的矩阵positive
,从最左边的列开始0th
,找到到最右边的列的最小路径(n - 1)th
。例如:
最小路径是包含 1 的路径。
在任何给定的方格m[i, j]
上,我们可以移动到 4 个方向 ( left, right, up, down
);当然,除了最左边,最右边的行/列的所有角落案例。例如,在 处[0, 0]
,我们只能移动right
或down
。
我的解决方案是构建一个m x n
顶点图,然后运行Floyd-Warshall计算任意两个顶点的所有对最短路径(u, v)
。然后运行另一个嵌套for
循环以检查0th
列的所有顶点与列的所有顶点(n - 1)th
以找到最小路径。
但是,我的教授通过使用以下递归提出了另一种算法:
S[i, j, L] =
min(
S[i - 1, j, L - 1] + cost[i - 1, j],
S[i + 1, j, L - 1] + cost[i + 1, j],
S[i, j - 1, L - 1] + cost[i, j - 1],
S[i, j + 1, L - 1] + cost[i, j + 1]);
我不知道它是如何工作的!因为在任何给定的方格[i, j]
上,我们都可以在 4 个方向上移动,这使得不可能根据之前的预先计算的值来构建表格。
我在这里错过了什么吗?我看不出这种重复是如何进行的。任何想法?