public class Solution {
// 定义四个方向的变化,分别是右、下、左、上
int[] dx = {1, 0, -1, 0};
int[] dy = {0, 1, 0, -1};
public int solve(char[][] grid) {
int ans = 0;
int n = grid.length;
int m = grid[0].length;
// 遍历网格
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
// 如果是岛屿部分
if (grid[i][j] == '1') {
dfs(grid, i, j, n, m);
ans++; // 每次调用 DFS 说明找到了一个岛屿
}
}
}
return ans;
}
// 深度优先搜索,用来将与当前岛屿相连的部分标记为已访问
public void dfs(char[][] grid, int x, int y, int n, int m) {
// 检查边界条件
if (x < 0 || y < 0 || x >= n || y >= m || grid[x][y] == '0') {
return;
}
// 标记当前格子为已访问
grid[x][y] = '0';
// 遍历四个方向
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
dfs(grid, nx, ny, n, m); // 递归搜索
}
}
}