1. void dfs(int[][] grid, int r, int c) {
    2. // 判断 base case
    3. // 如果坐标 (r, c) 超出了网格范围,直接返回
    4. if (!inArea(grid, r, c)) {
    5. return;
    6. }
    7. // 如果这个格子不是岛屿,直接返回
    8. if (grid[r][c] != 1) {
    9. return;
    10. }
    11. grid[r][c] = 2; // 将格子标记为「已遍历过」
    12. // 访问上、下、左、右四个相邻结点
    13. dfs(grid, r - 1, c);
    14. dfs(grid, r + 1, c);
    15. dfs(grid, r, c - 1);
    16. dfs(grid, r, c + 1);
    17. }
    18. // 判断坐标 (r, c) 是否在网格中
    19. boolean inArea(int[][] grid, int r, int c) {
    20. return 0 <= r && r < grid.length
    21. && 0 <= c && c < grid[0].length;
    22. }