Untitled

 avatar
unknown
plain_text
a year ago
1.3 kB
3
Indexable
class Solution {
public:
    int dx[4] = {-1, 0, 1, 0};
    int dy[4] = {0, 1, 0, -1};

    bool bfs(int i, int j, vector<vector<int>>& grid2, vector<vector<int>> &grid1){
        queue<pair<int, int>> q;
        int m = grid1.size();
        int n = grid1[0].size();
        q.push({i,j});
        grid2[i][j] = 0;
        bool flag = true;
        while(!q.empty()){
            auto point = q.front(); q.pop();
            int x = point.first;
            int y = point.second;
            for(int k=0;k<4;k++){
                int xx = x + dx[k];
                int yy = y + dy[k];
                if(xx>=0 && xx<m && yy>=0 && yy<n && grid2[xx][yy]==1){
                    if(grid1[xx][yy]==0 && flag==true) flag = false;
                    grid2[xx][yy] = 0;
                    q.push({xx,yy});
                }
            }
        }
        return flag;
    }
    int countSubIslands(vector<vector<int>>& grid1, vector<vector<int>>& grid2) {
        int m = grid1.size();
        int n = grid1[0].size();
        int count = 0;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(grid2[i][j]==1 && grid1[i][j]==1){
                    if(bfs(i,j, grid2, grid1)) {
                        count++;
                    }
                }
            }
        }
        return count;
    }
};
Editor is loading...
Leave a Comment