题目
思路 多源BFS
要求以水域为中心广度优先搜索,并且每一个陆地的值都得是BFS过程中最小的值。首先把所有水域放入队列中,再和单源BFS一样遍历。根据BFS的性质,这样也能够保证每个陆地的高度都是BFS过程中的最低高度。
代码
class Solution {
public:
int dirs[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
vector<vector<int>> highestPeak(vector<vector<int>>& isWater) {
int m=isWater.size(),n=isWater[0].size();
vector<vector<int>> grid(m,vector<int>(n,0));
queue<pair<int,int>> q;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(isWater[i][j]==1)
q.push(make_pair(i,j));
else
grid[i][j]=-1;
}
}
while(!q.empty()){
auto [x,y]=q.front();
q.pop();
for(int i=0;i<4;i++){
int xx=x+dirs[i][0],yy=y+dirs[i][1];
if(xx>=0 && xx<m && yy>=0 && yy<n && grid[xx][yy]==-1){
grid[xx][yy]=grid[x][y]+1;
q.emplace(xx,yy);
}
}
}
return grid;
}
};