力扣
解题报告:
多元BFS。
进阶一下:
二维数组,1表示等高线,0表示平地,比如
输入
010
111
010
输出
010
121
010
输入
010
101
010
输出
010
111
010
即输入一个二维地图,保证等高线一定是闭合的环,最外圈保证一定是0,求每个点的真实高度。
class Solution {
public:
vector<vector<int>> highestPeak(vector<vector<int>>& isWater) {
int n = isWater.size(), m = isWater[0].size();
vector<vector<int>> ans(n, vector<int>(m,-1));
queue<pair<int, int> > q;
for(int i = 0; i<n; i++) {
for(int j = 0; j<m; j++) {
if(isWater[i][j] == 1) {
q.push(make_pair(i,j));
ans[i][j] = 0;
}
}
}
int nx[4] = {0,1,0,-1};
int ny[4] = {1,0,-1,0};
while(q.size()) {
pair<int, int> cur = q.front();q.pop();
for(int k = 0; k<4; k++) {
int tx = cur.first + nx[k];
int ty = cur.second + ny[k];
if(tx < 0 || tx >= n || ty < 0 || ty >= m) continue;
if(ans[tx][ty] != -1) continue;
ans[tx][ty] = ans[cur.first][cur.second] + 1;
q.push(make_pair(tx, ty));
}
}
return ans;
}
};