LeetCode 1162. 地图分析

110 阅读1分钟
class Solution {
public:

    int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
    int maxDistance(vector<vector<int>>& grid) {
        int n = grid.size();
        int m = grid[0].size();
        deque<pair<int, int>> deq;
        for(int i = 0; i < n; i ++) 
            for(int j = 0; j < m; j ++) {
                if(grid[i][j]) {
                    deq.push_back({i, j});
                }
            }

        if(deq.size() == 0 || deq.size() == m * n) return -1;

        int dis = -1;
        while(deq.size() != 0) {
            dis ++;
            int size = deq.size();
            while(size --) {
                auto cur = deq.front();
                deq.pop_front();
                for(int i = 0; i < 4; i ++) {
                    int x = cur.first + dx[i], y = cur.second + dy[i];
                    if(x < 0 || x >= n || y < 0 || y >= m || grid[x][y] != 0) continue;
                    grid[x][y] = 2;
                    deq.push_back({x, y});
                }
            }
        }
        return dis; 
    }
};