// It passes 38/49 TCS
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
int r = grid.size();
if(r == 0)
return 0;
int c = grid[0].size();
if(c == 0)
return 0;
queue<pair<int , int>> que;
int start = 0;
auto valid = [&](int ii,int jj){
if(ii<r && ii>=0 && jj<c && jj>=0)
return true;
return false;
};
vector<pair<int,int>> dir{{0,1} ,{1,0} ,{-1,0} ,{0,-1}};
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
if(grid[i][j] == '0')
continue;
start++;
que.push({i,j});
grid[i][j] = '0';
while(!que.empty()){
pair<int ,int> p = que.front();
int ii, jj;
ii = p.first;
jj = p.second;
que.pop();
grid[ii][jj] = '0';
for(int k=0;k<dir.size();k++)
if(valid(ii+dir[k].first,jj+dir[k].second))
if((grid[ii+dir[k].first][jj+dir[k].second] == '1'))
que.push({ii+dir[k].first , jj+dir[k].second});
}
}
}
return start;
}};