領扣 矩陣最小路徑和

2021-10-11 01:12:17 字數 1609 閱讀 6336

給定乙個只含非負整數的m*n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。

tip: 你在同一時間只能向下或者向右移動一步

樣例

樣例 1:

輸入: [[1,3,1],[1,5,1],[4,2,1]]

輸出: 7

樣例解釋:

路線為: 1 -> 3 -> 1 -> 1 -> 1。

樣例 2:

輸入: [[1,3,2]]

輸出: 6

解釋:  

路線是: 1 -> 3 -> 2

有兩種方案可以實現:

採用遞迴,實現簡單,但是資料大時效能弱。

採用廣度優先搜尋方式,效能較好。

class

solution

//return minpath(grid, 0, 0);

return

minpath

(grid);}

// 遞迴方式搜尋----數量大時,效能較弱。

intminpath

(vectorint>>

&grid,

int i,

int j)

int nright =

0x7fffffff;if

(j +

1< grid[0]

.size()

)int ndown =

0x7fffffff;if

(i +

1< grid.

size()

)return std::

min(nright, ndown)

+ grid[i]

[j];

}// 廣度優先搜尋

intminpath

(vectorint>>

&grid)

}struct positon

;

std::queue p;

// 加入起點

p.push

(positon);

tmp[0]

[0]=

1;int nup =0;

int nleft =0;

while

(p.size()

)else

// 從上邊走過來的距離

if(frn.x >0)

else

// 取兩者最小

if(nleft !=

0x7fffffff

|| nup !=

0x7fffffff

)else

// 右 下節點加入佇列,若已被加入過,則不加入,否則指數型增長

if(frn.y < n -

1&& tmp[frn.x]

[frn.y +1]

!=1))

;}if(frn.x < m -

1&& tmp[frn.x +1]

[frn.y]!=1

));}

//隊頂出隊

p.pop();

}return arr[m -1]

[n -1]

;}};

矩陣最小路徑

原創 問題描述 給出乙個 n x m 的矩陣,從左上角開始每次只能向右走或者向下走,最後達到右下角的位置,路徑中所有數字累加起來就是路徑和,返回所有路徑的最小路徑和。比如 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 最短路徑是12 解題思路 此題屬於動態規劃類題目,我們可以用乙個...

矩陣的最小路徑和

準備校招的!這些是一本書的筆記 程式設計師 面試指南 it名企演算法與資料結構題目最優解 左程雲 給定乙個矩陣m,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,返回所有的路徑中最小的路徑和 舉例 如果給定的m如下 135 9 813 4 506 1 8...

矩陣的最小路徑和

給定乙個矩陣m,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,返回所有的路徑中最小的路徑和。方法一 遞迴 coding utf 8 defsolution m,l n l m 0 0 if len m 1 and len m 0 1 return l ...