📜  Java程序查找岛屿的数量|设置 1(使用 DFS)(1)

📅  最后修改于: 2023-12-03 14:43:03.922000             🧑  作者: Mango

Java程序查找岛屿的数量 | 使用 DFS

介绍

在计算机科学中,岛屿是指由相邻的陆地组成的区域,被周围的水包围。给定一个由 '1'(陆地)和 '0'(水)组成的二维网格地图,编写一个函数来计算岛屿的数量。岛屿总是被水包围,而且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接而成。

我们可以通过深度优先搜索(Depth-First-Search, DFS)算法来遍历从起点位置开始的所有可到达的陆地。

程序实现

以下是使用 DFS 算法实现查找岛屿数量的 Java 程序:

class Solution {
    public int numIslands(char[][] grid) {
        int count = 0;
        for (int i=0; i<grid.length; i++) {
            for (int j=0; j<grid[0].length; j++) {
                if (grid[i][j] == '1') { // 如果当前位置是陆地
                    dfs(grid, i, j); // 开始深度优先搜索
                    count++; // 岛屿数量加1
                }
            }
        }
        return count;
    }
    
    public void dfs(char[][] grid, int i, int j) {
        if (i<0 || i>=grid.length || j<0 || j>=grid[0].length || grid[i][j]=='0') {
            // 递归结束条件:超出地图边界或当前位置是水
            return;
        }
        grid[i][j] = '0'; // 标记当前位置为已访问过,避免重复遍历
        dfs(grid, i-1, j); // 向左
        dfs(grid, i+1, j); // 向右
        dfs(grid, i, j-1); // 向上
        dfs(grid, i, j+1); // 向下
    }
}
代码解析
  1. numIslands() 函数:首先使用两个嵌套的 for 循环遍历整个地图,在遍历的过程中,如果当前位置是陆地,就开始进行深度优先搜索,然后岛屿数量加1,最终返回岛屿数量。

  2. dfs() 函数:使用递归实现深度优先搜索,主要是分为四个方向分别搜索。需要注意的是,为了避免重复遍历,我们需要将已经访问过的陆地标记为水。同时,当当前位置超出地图边界或者当前位置是水时,将递归结束。

总结

本文介绍了使用深度优先搜索算法实现在二维网格地图中查找岛屿数量的 Java 程序,并对程序进行了详细解析。希望本文能够对大家有所帮助。