LeetCode 1765地图中的最高点[BFS] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1765地图中的最高点[BFS] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
岛屿系列的经典题目,一眼看就知道用BFS来解决。首先构建高度数组,长宽为整数矩阵的长宽,初始化都是-1,表示未访问,这很重要,因为在之后的更新中,已经访问的就不能更新了,因为肯定受到附近点的束缚无法更新。其次定义队列,存储水域和以及更新的点,因为之后的操作都从水域开始,之后的步骤如下:
- 遍历数组,找到所有的水域,更新高度数组(水域为0),并存储到队列中。
- 循环访问队列直到空,从队列头部出队,遍历该点附近的四个点,判断是否在范围内且未访问,更新点并放入队列中。
- 队列空退出,返回高度数组。
代码如下:
class Solution
private:
int direction[4][2] = 1, 0, -1, 0, 0, 1, 0, -1;
public:
vector<vector<int>> highestPeak(vector<vector<int>>& isWater)
int m = isWater.size(), n = isWater[0].size();
// 高度矩阵初始化,-1为未访问
vector<vector<int>> ans(m, vector<int>(n, -1));
// 记录水域和已被更新的点
queue<pair<int, int>> q;
for(int i = 0; i < m; i ++)
for(int j = 0; j < n; j ++)
if(isWater[i][j])
ans[i][j] = 0;
q.push(i, j);
while(!q.empty())
auto& site = q.front();
for(auto& dir : direction)
int x = site.first + dir[0], y = site.second + dir[1];
// 在范围内且未被访问过
if(x >= 0 && x < m && y >= 0 && y < n && ans[x][y] == -1)
ans[x][y] = ans[site.first][site.second] + 1;
q.push(x, y);
// 后pop,否则site不可用
q.pop();
return ans;
;
以上是关于LeetCode 1765地图中的最高点[BFS] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
leetcode每日一题——地图中的最高点(路径更新权值问题)
Leetcode之广度优先搜索(BFS)专题-1162. 地图分析(As Far from Land as Possible)