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); // 递归搜索 } } }