class Solution {
public:
    /**
	 遍历,遇到一,岛屿数加1,
     直接在原矩阵中进行修改,把正在检测到的岛屿都置为0;
     */
    int solve(vector<vector<char> >& grid) {
        int n=grid.size();
        int m=grid[0].size();
        if(n == 0){
            return 0;
        }

        int count =0;
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                if(grid[i][j] == '1'){
                    count++;

                    dfs(grid, i, j);
                }
            }
        }

        return count;
    }

    void dfs(vector<vector<char>>& grid, int i, int j){
        grid[i][j] = 0;

        if(j+1 < grid[0].size() && grid[i][j+1] == '1'){
            dfs(grid, i, j+1);
        }

        if( i+1<grid.size() && grid[i+1][j] == '1' ){
            dfs(grid, i+1, j);
        }

        if( i-1 >= 0 && grid[i-1][j] == '1' ){
            dfs(grid, i-1, j);
        }

        if( j-1 >=0 && grid[i][j-1] == '1' ){
            dfs(grid, i, j-1);
        }
    }
};