void dfs(char** grid, int gridRowLen, int gridColLen, int x, int y) {
    // 判断当前坐标是否在矩阵范围内
    if (x < 0 || x >= gridRowLen || y < 0 || y >= gridColLen) {
        return;
    }
    
    // 如果当前位置不是陆地或者已经访问过,返回
    if (grid[x][y] == '0') {
        return;
    }
    
    // 标记当前位置为海洋,表示已经访问过
    grid[x][y] = '0';
    
    // 递归处理四个方向
    dfs(grid, gridRowLen, gridColLen, x - 1, y); // 上
    dfs(grid, gridRowLen, gridColLen, x + 1, y); // 下
    dfs(grid, gridRowLen, gridColLen, x, y - 1); // 左
    dfs(grid, gridRowLen, gridColLen, x, y + 1); // 右
}

int solve(char** grid, int gridRowLen, int* gridColLen) {
    int islandCount = 0;
    
    // 遍历整个网格
    for (int i = 0; i < gridRowLen; i++) {
        for (int j = 0; j < *gridColLen; j++) {
            // 如果当前格子是陆地且没有被访问过
            if (grid[i][j] == '1') {
                // 使用DFS搜索整个岛屿并标记
                dfs(grid, gridRowLen, *gridColLen, i, j);
                // 发现一个新的岛屿,计数加一
                islandCount++;
            }
        }
    }
    
    return islandCount;
}