鑑於所有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