米乐 M6最小体力消耗路径(算法)

2023-08-22 11:29:23
浏览次数:
返回列表

  米乐 M6米乐 M6你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度。一开始你在最左上角的格子 (0, 0) ,且你希望去最右下角的格子 (rows-1, columns-1) (注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。

  一条路径耗费的 体力值 是路径上相邻格子之间 高度差绝对值 的 最大值 决定的。

  最开始想用动态规划思路看看能不能解决问题,但是该题可以有四个方向移动,并不是每次都只能往下或者往右移动,dp解决不了该题

  因此现在我们已经从(0,0)走到了(1,0),变化就是我们多了一个格子,以及多了两种选择即(1,0)->

  (1,1),(1,0)->

  (2,0)

  也就是说我们维护一个优先队列,每次选取最少的路线去走,就能得到当下最好的结果

  我们可以想象一下,绝对值差的米乐M6 M6米乐越多的地方像凸起的岛屿,而这个矩阵上方在均匀的下雨,下面雨水什么时候可以吧(0,0)以及(n-1,m-1)联通在一起呢?

  我们设置消耗最大体力max为0,随着max的不断提升,我们就可以从一个方格移动到另一个方格之中,这些方格是联通的

  知道max大到一定程度,(0,0)所在的方格也和(n-1,n-1)的方格联通即可,就是我们寻找的max

  怎么转化为程序语言呢,同样可以维护一个最小堆,让所有边都进入堆中,从最小的开始不断的联通矩阵即可。如果左上角和右下角从非连通状态变为连通状态,那么这个边的长度即为答案。

搜索