class Solution {
private:
    int dir[5]={-1,0,1,0,-1};
public:
    /**
     * 判断岛屿数量
     * @param grid char字符型vector<vector<>> 
     * @return int整型
     */
    void dfs(int x, int y, vector<vector<char> >& grid, vector<vector<bool>> &mark, int row, int col){
        if(x<0||x>=row||y<0||y>=col||mark[x][y]==false) return;
        if(grid[x][y]=='1'){
            mark[x][y] = false;
            for(int i=0;i<4;i++){
                dfs(x+dir[i],y+dir[i+1],grid,mark,row,col);
            }
        }
    }
    
    int solve(vector<vector<char> >& grid) {
        // write code here
        if(grid.size()==0){return 0;}
        int row = grid.size();
        int col = grid[0].size();
        int count = 0;
        vector<vector<bool>> mark(row,vector<bool>(col,true));
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if(grid[i][j]=='1'&&mark[i][j]==true){
                    dfs(i,j,grid,mark,row,col);
                    count++;
                }
            }
        }
        return count;
    }
};