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;
}