class Solution { public: bool check(int x,int y,vector<vector<char> >& grid,vector<vector<bool>>&f) { return x>=0&&x<grid.size()&&y>=0&&y<grid[0].size()&&grid[x][y]=='1'&&!f[x][y]; } void bfs(int x,int y,int &res,vector<vector<char>>&grid,vector<vector<bool>>&f) { vector<vector<int>>dir{{1,0},{-1,0},{0,1},{0,-1}}; queue<pair<int,int>>p; p.push({x,y}); while(!p.empty()) { pair<int,int>k=p.front(); f[k.first][k.second]=true; p.pop(); for(auto m:dir) { int xx=m[0]+k.first,yy=m[1]+k.second; if(check(xx,yy,grid,f))p.push({xx,yy}); } } res++; } int solve(vector<vector<char> >& grid) { int res=0; vector<vector<bool>> f(grid.size()+10,vector<bool>(grid[0].size()+10,false)); for(int i=0;i<grid.size();i++) for(int j=0;j<grid[0].size();j++) if(check(i,j,grid,f))bfs(i,j,res,grid,f); return res; } };