您的位置:首頁>正文

動態規劃演算法之矩陣的路徑最小和

由於特殊原因前兩天沒有發頭條, 這裡小編給大家說聲抱歉!!!!!!寶寶不是故意的〒▽〒。 。 。

關注“愛當程式師的我”, 每天都有關於程式設計頭條發佈

問題描述:給定一個矩陣m, 左上角開始每次只能向右或者向下走, 最後到達右下角的位置, 路徑上所有的數位累加起來就是路徑和, 返回搜有的路徑中最小的路徑和。

例如:

給定陣列m

1 3 5 9

8 1 3 4

5 0 6 1

8 8 4 0

可知最短路徑是:1 3 1 0 6 1 0, 路徑和為12

思路:這是一道簡單的動態規劃, 可以創建一個和原陣列一樣的大小的另一個陣列v, 初始化它的第一行和第一列。 初始化第一行的時候(0-j), v[j]等於m[0-j]的值累加,

第一列同理, 則可以得到:

1 4 9 18

9

14

22

接下來填入其他元素, 按照規則, 該點位置的上和左小的那個數加上m[該點位置], 依次填寫該表, 即可得到最終表

1 4 9 18

9 5 8 12

14 5 11 12

22 13 15 12

最後返回右下角的值就可以了。

C++代碼實現:

返回矩陣最小路徑和代碼

上述的方法簡單而且容易想到, 但是該演算法的空間複雜度比較高,

這裡可以只使用O(min{M,N})(M為m的行, N為m的列)。

思想:new一個陣列v, 用v一排一排的遍歷陣列m, 最終即可得到最終結果。

C++代碼:

方法2

總結:幾乎所有的動態規劃矩陣問題都可以用這兩種方法, 也是面試筆試經常考的, 收藏吧, 保證有利無害, O(∩_∩)O~~。

結束語:

如果喜歡這篇頭條, 一定要收藏喲^O^

點擊關注, 瞭解更多關於程式設計的知識^O^

如果有不懂的地方, 可以留言, 相互探討, 相互學習, 共同進步^O^

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示