最基础的DFS了。

lass Solution {
public:
    void dfs(vector<vector<char> >& grid, int i, int j, int w, int h)
    {
        grid[i][j] = '0';
        if(grid[i - 1][j] == '1' && i - 1 >= 0) dfs(grid, i - 1, j, w, h);
        if(grid[i + 1][j] == '1' && i + 1 < w) dfs(grid, i + 1, j, w, h);
        if(grid[i][j - 1] == '1' && j - 1 >= 0) dfs(grid, i, j - 1, w, h);
        if(grid[i][j + 1] == '1' && j + 1 < h) dfs(grid, i, j + 1, w, h);
    }
    int solve(vector<vector<char> >& grid) {
        int w = grid.size(), h = grid[0].size(), count = 0;
        if(w == 0) return 0;
        for(int i = 0; i < w; i++)
            for(int j = 0; j < h; j++)
                if(grid[i][j] == '1')
                    count++, dfs(grid, i, j, w, h);
        return count;
    }
};