class Solution {
public:
    /**
     * 判断岛屿数量
     * @param grid char字符型vector<vector<>> 
     * @return int整型
     */
 #include <iostream>
#include <fstream>
#include <string>

#define fas(i,a,b) for(int i=a;i<b;++i) //[)
#define fdes(i,b,a) for(int i=b;a<=i;--i) //[]
#define mm memset
#define ll long long
#define pi acos(-1)






void dfs(vector<vector<char> >& matrix,int m,int n,int i,int j)
{
    if(check(m,n,i,j)==false || matrix[i][j]=='0')
    {
        return ;
    }
    // visit
    matrix[i][j]='0';
    dfs(matrix, m, n, i+1, j);
    dfs(matrix, m, n, i-1, j);
    dfs(matrix, m, n, i, j+1);
    dfs(matrix, m, n, i, j+1);
    dfs(matrix, m, n, i, j-1);
}

bool check(int m,int n,int i,int j)
{
    if(i<0||m<=i||j<0||n<=j)
        return false;
    return true;
}

  int solve(vector<vector<char> >& grid) {

	// write code here
	int m=grid.size(),n=grid[0].size();
	int ans=0;

	fas(i,0,m)
	  fas(j,0,n)
	{
	  if(grid[i][j]=='1')
	  {
		dfs(grid,m,n,i,j);
		++ans;
	  }     
	}
	return ans;
  }
};