由於特殊原因前兩天沒有發頭條,
這裡小編給大家說聲抱歉!!!!!!寶寶不是故意的〒▽〒。
。
。
關注“愛當程式師的我”, 每天都有關於程式設計頭條發佈
問題描述:給定一個矩陣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++代碼實現:
返回矩陣最小路徑和代碼
上述的方法簡單而且容易想到, 但是該演算法的空間複雜度比較高,
思想:new一個陣列v, 用v一排一排的遍歷陣列m, 最終即可得到最終結果。
C++代碼:
方法2
總結:幾乎所有的動態規劃矩陣問題都可以用這兩種方法, 也是面試筆試經常考的, 收藏吧, 保證有利無害, O(∩_∩)O~~。
結束語:
如果喜歡這篇頭條, 一定要收藏喲^O^
點擊關注, 瞭解更多關於程式設計的知識^O^
如果有不懂的地方, 可以留言, 相互探討, 相互學習, 共同進步^O^