/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 判断岛屿数量
 * @param grid char字符型二维数组 
 * @param gridRowLen int grid数组行数
 * @param gridColLen int* grid数组列数
 * @return int整型
 */

void dfs(char** grid, int gridRowLen, int* gridColLen, int row, int col) {
    // 如果超越了边界,直接返回
    if(row < 0 || row >= gridRowLen || col < 0 || col >= gridColLen[row])  return;

    // 如果当前位置是0,则返回
    if(grid[row][col] == '0') return;
    // 否则的话,标记为0,然后继续递归访问上下左右的岛屿
    grid[row][col] = '0';
    dfs(grid, gridRowLen, gridColLen, row + 1, col);
    dfs(grid, gridRowLen, gridColLen, row - 1, col);
    dfs(grid, gridRowLen, gridColLen, row, col + 1);
    dfs(grid, gridRowLen, gridColLen, row, col - 1);
}

#include <stdint.h>
int solve(char** grid, int gridRowLen, int* gridColLen ) {
    // write code here
    int island = 0;
    for(int i = 0; i < gridRowLen; i++) {
        for(int j = 0; j < gridColLen[i]; j++) {
            if(grid[i][j] == '1') {
                island++;
                dfs(grid, gridRowLen, gridColLen, i, j);
            }
        }
    }

    return island;
}