class Solution {
public:
void gai(vector<vector<char>>& grid, int n, int m){
int size = grid.size();
if(size == 0)return;
int M = grid[0].size();
if(grid[n][m]=='0') return;
grid[n][m] ='0';
if(m + 1 < M && grid[n][m+1]=='1')gai(grid,n, m+1);
if(m - 1 >=0 && grid[n][m-1]=='1')gai(grid,n, m-1);
if(n+1 < size && grid[n +1][m]=='1')gai(grid,n+1, m);
if(n-1 >=0 && grid[n -1][m]=='1')gai(grid,n-1, m);
}
int numIslands(vector<vector<char>>& grid) {
int ans = 0;
int n = grid.size();
if(n == 0) return 0;
int m = grid[0].size();
for(int i = 0; i < n;i++){
for(int j = 0; j < m;j++){
if(grid[i][j]=='1'){
gai(grid,i,j);
ans++;
}
}
}
return ans;
}
};