题目地址
LeetCode#778 Swim in Rising Water
题目描述
On an N x N grid
, each square grid[i][j]
represents the elevation at that point (i,j)
.
Now rain starts to fall. At time t
, the depth of the water everywhere is t
. You can swim from a square to another 4-directionally adjacent square if and only if the elevation of both squares individually are at most t
. You can swim infinite distance in zero time. Of course, you must stay within the boundaries of the grid during your swim.
You start at the top left square (0, 0)
. What is the least time until you can reach the bottom right square (N-1, N-1)
?
Example 1:
1 | Input: [[0,2],[1,3]] |
Example 2:
1 | Input: [[0,1,2,3,4],[24,23,22,21,5],[12,13,14,15,16],[11,17,18,19,20],[10,9,8,7,6]] |
Note:
2 <= N <= 50
.- grid[i][j] is a permutation of [0, …, N*N - 1].
解题思路
题目意思是给定一个矩阵,里边的每个数字代表着第 N 秒才可以从这里通过,最终要求从左上角到右下角找出一条能最早到达的路径,也就是说一路上经过的数字都尽可能最小。
这道题思路基本上就是优先队列(Priority Queue)了,将经过的值都 push 进去,然后 pop 队首(因为是优先队列,所以是能到达的最小值),再从 pop 继续扩散。当到达右下角的时候返回。
解题代码【.CPP】
1 | class Solution { |