Leetcode 200. 岛屿的个数

class Solution {
public:
    //全局队列用来缓存
    queue<pair<int, int>> q;
    
    void check(int x, int y, vector<vector<char>>& grid)
    {
        int m = grid.size();
        int n  = grid[0].size();
        if(x >= 0 && x < m && y>=0 && y<n && grid[x][y] == '1')
        {
            q.push(make_pair(x,y));
            grid[x][y] = '0';
        }
    }

    void floodfill(int x, int y, vector<vector<char>>& grid)
    {
        q.push(make_pair(x,y));
        grid[x][y] = '0';
        while(!q.empty())
        {
            auto tmp = q.front();
            int x_ = tmp.first;
            int y_ = tmp.second;
            q.pop();
            check(x_-1,y_,grid);
            check(x_+1,y_,grid);
            check(x_,y_-1,grid);
            check(x_,y_+1,grid);
        }
    }
    
    int numIslands(vector<vector<char>>& grid) {
        int m = grid.size();
        if(m==0)
            return 0;
        int n  = grid[0].size();
        if(n==0)
            return 0;
        
        int ans  = 0;
        for(int i=0; i<m;++i)
        {
            for(int j=0;j<n;++j)
            {
                if(grid[i][j] == '1')
                {
                    floodfill(i,j,grid);
                    ans++;
                }
            }
        }
        return ans;
    }
};

猜你喜欢

转载自www.cnblogs.com/randyniu/p/9220634.html