1631 最小體力消耗路徑(BFS 動態規劃)

2021-10-18 06:41:18 字數 1742 閱讀 3741

1631. 最小體力消耗路徑

難度中等127

你準備參加一場遠足活動。給你乙個二維rows x columns的地圖heights,其中heights[row][col]表示格仔(row, col)的高度。一開始你在最左上角的格仔(0, 0),且你希望去最右下角的格仔(rows-1, columns-1)(注意下標從0開始編號)。你每次可以往四個方向之一移動,你想要找到耗費體力最小的一條路徑。

一條路徑耗費的體力值是路徑上相鄰格仔之間高度差絕對值最大值決定的。

請你返回從左上角走到右下角的最小體力消耗值

示例 1:

輸入:heights = [[1,2,2],[3,8,2],[5,3,5]]輸出:2解釋:路徑 [1,3,5,3,5] 連續格仔的差值絕對值最大為 2 。

這條路徑比路徑 [1,2,2,2,5] 更優,因為另一條路徑差值最大值為 3 。

示例 2:

輸入:heights = [[1,2,3],[3,8,4],[5,3,5]]輸出:1解釋:路徑 [1,2,3,4,5] 的相鄰格仔差值絕對值最大為 1 ,比路徑 [1,3,5,3,5] 更優。
示例 3:

輸入:heights = [[1,2,1,1,1],[1,2,1,2,1],[1,2,1,2,1],[1,2,1,2,1],[1,1,1,2,1]]輸出:0解釋:上圖所示路徑不需要消耗任何體力。
實際上採用dijkstra時間複雜度會更低,這裡採用的是bfs和乙個dp陣列儲存到達點的最大消耗體力,通過搜尋實時更新。

(不同點在於dijkstra還需維護乙個優先佇列,以保證彈出的每個都是最短的)

#define inf (0x3f3f3f3f)

class solution ;

int dir_y[4] = ;

int val[101][101];

public:

int minimumeffortpath(vector>& heights) }}

graph.pop();

} return val[row - 1][col - 1];

}};

1631 最小體力消耗路徑

1631.最小體力消耗路徑 你準備參加一場遠足活動。給你乙個二維rows x columns的地圖heights,其中heights row col 表示格仔 row,col 的高度。一開始你在最左上角的格仔 0,0 且你希望去最右下角的格仔 rows 1,columns 1 注意下標從0開始編號 ...

1631 最小體力消耗路徑

你準備參加一場遠足活動。給你乙個二維 rows x columns 的地圖 heights 其中 heights row col 表示格仔 row,col 的高度。一開始你在最左上角的格仔 0,0 且你希望去最右下角的格仔 rows 1,columns 1 注意下標從 0 開始編號 你每次可以往 上...

1631 最小體力消耗路徑

你準備參加一場遠足活動。給你乙個二維 rows x columns 的地圖 heights 其中 heights row col 表示格仔 row,col 的高度。一開始你在最左上角的格仔 0,0 且你希望去最右下角的格仔 rows 1,columns 1 注意下標從 0 開始編號 你每次可以往 上...