classSolution{int m, n, ans =0;int color =2;vector<vector<int>> dir ={{1,0},{0,1},{-1,0},{0,-1}};vector<vector<int>> grid1_copy;typedef pair<int,int> pii;public:intcountSubIslands(vector<vector<int>>& grid1, vector<vector<int>>& grid2){m = grid1.size(), n = grid1[0].size();grid1_copy = grid1;for(int i =0; i < m;++i){for(int j =0; j < n;++j){if(grid2[i][j]!=1)continue;bfs(grid2, i, j);}}return ans;}voidbfs(vector<vector<int>>& g,int i,int j){queue<pii> q;q.push({i, j});color++;g[i][j]= color;bool water =false;//遇到水while(!q.empty()){int x = q.front().first;int y = q.front().second;q.pop();if(grid1_copy[x][y]==0)water =true;for(int k =0; k <4;++k){int nx = x + dir[k][0];int ny = y + dir[k][1];if(nx>=0&& nx<m && ny>=0&& ny<n && g[nx][ny]==1){q.push({nx, ny});g[nx][ny]= color;}}}ans +=!water;}};