鉴于所有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
检查与(n - 1)th
列的所有顶点0th
列的所有顶点找到最小路径。
然而,我的教授通过以下复发建议另一种算法:
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个方向移动,这使得根据以前的预先计算的值建立一个表格是不可能的。
我在这里错过了什么吗?我看不出这种复发是如何发生的。任何想法?
我想你的教授忘了提及,1)s不需要被计算(即无穷大)过去的矩阵的边缘上,以及2)S [0,0,0] = 0。 – Beta 2013-03-24 06:39:18
... P.S。我知道这不是你要问的,但是这真的要求迭代(非递归)的BFS。 – Beta 2013-03-24 06:43:45
如果你有'S [i,j,0] = infinity',除了'S [0,0,0] = 0',那么它应该工作。最终所有的S [i,j,k] == S [i,j,k + 1],你可以停止迭代。 S [i,j,k]具有从(0,0)到(i,j)的最短路径的代价。 – 2013-03-24 06:51:44