深度优先dfs。遍历矩阵,从矩阵中的每个位置开始dfs周围是'1'的位置,dfs的同时修改'1'为'0'作为标记。思路在于每次走遍一块陆地,并将这一块陆地修改为海洋。

class Solution {
public:
    /**
     * 判断岛屿数量
     * @param grid char字符型vector<vector<>> 
     * @return int整型
     */
    struct Pos{
        int dx;
        int dy;
    };
    
    vector<Pos> dir{{-1,0},{0,1},{1,0},{0,-1}};
    
    void dfs(vector<vector<char>>& grid,int x,int y){
        int m=grid.size();
        int n=grid[0].size();
        if(x<0 || y<0 || x>=m || y>=n || grid[x][y]=='0') return;
        grid[x][y]='0';
        for(int i=0;i<dir.size();i++){
            int next_x=x+dir[i].dx;
            int next_y=y+dir[i].dy;
            dfs(grid,next_x,next_y);
        }
    }
    
    int solve(vector<vector<char> >& grid) {
        int m=grid.size();
        int n=grid[0].size();
        if(m==0 || n==0) return 0;
        int cont=0;
        for(int x=0;x<m;x++){
            for(int y=0;y<n;y++){
                if(grid[x][y]=='1'){
                    cont++;
                    dfs(grid,x,y);
                }
            }
        }
        return cont;
    }
};