Scan the whole graph, if a '1' is found, do BFS and change all '1's connected to that '1' to '0'.
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
if(grid.empty())
return 0;
int res=0;
int m=grid.size();
int n=grid[0].size();
queue<pair<int,int> > q;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
if(grid[i][j]=='1')
{
res++;//one island is found, then drown this island
grid[i][j]='0';
q.push(make_pair(i,j));
while(!q.empty())
{
int x=q.front().first;
int y=q.front().second;
q.pop();
if(x!=0&&grid[x-1][y]=='1')
{
grid[x-1][y]='0';
q.push(make_pair(x-1,y));
}
if(x!=m-1&&grid[x+1][y]=='1')
{
grid[x+1][y]='0';
q.push(make_pair(x+1,y));
}
if(y!=0&&grid[x][y-1]=='1')
{
grid[x][y-1]='0';
q.push(make_pair(x,y-1));
}
if(y!=n-1&&grid[x][y+1]=='1')
{
grid[x][y+1]='0';
q.push(make_pair(x,y+1));
}
}
}
}
return res;
}
};