力扣
解题报告:
多元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;}
};