岛屿数量介绍

2023-12-15 11:40:25

在Java编程语言中,岛屿数量通常指的是在一个二维字符数组(grid)中,相邻的、值为'1'的格子数量。这个二维字符数组可能代表一个地图或一个二维平面,每个'1'代表一个岛屿或地形凸起,每个'0'代表一个海洋或平坦地区。

计算岛屿数量的常用方法是深度优先搜索(DFS)。首先,从地图的任意一个'1'开始,递归地搜索相邻的'1'。每当找到一个'1'时,计数器加一。搜索完成后,计数器的值就是岛屿数量。

下面是一个Java程序示例,它使用DFS算法来计算二维字符数组中的岛屿数量:

  1. public class NumberIslands {
  2. ????public static int[] DX = new int[]{1, 0, -1, 0}; // 定义上、右、下、左四个方向的移动步数
  3. ????public static int[] DY = new int[]{0, 1, 0, -1}; // 对应上、右、下、左四个方向的移动方向
  4. ????
  5. ????public static int numIslands(char[][] grid) {
  6. ????????int count = 0; // 岛屿数量初始化为0
  7. ????????if (grid == null || grid.length == 0) {
  8. ????????????return count; // 如果输入的二维字符数组为空,直接返回0
  9. ????????}
  10. ????????int m = grid.length; // 地图的行数
  11. ????????int n = grid[0].length; // 地图的列数
  12. ????????for (int i = 0; i < m; i++) {
  13. ????????????for (int j = 0; j < n; j++) {
  14. ????????????????if (grid[i][j] == '1') { // 如果当前位置是岛屿(值为'1')
  15. ????????????????????dfs(grid, i, j, m, n, count); // 调用深度优先搜索函数
  16. ????????????????????count++; // 岛屿数量加一
  17. ????????????????}
  18. ????????????}
  19. ????????}
  20. ????????return count; // 返回岛屿数量
  21. ????}
  22. ????
  23. ????private static void dfs(char[][] grid, int i, int j, int m, int n, int count) {
  24. ????????if (i < 0 || j < 0 || i >= m || j >= n || grid[i][j] != '1') {
  25. ????????????return; // 如果当前位置不在地图范围内或者是海洋(值为'0'),或者是已经访问过的岛屿,直接返回
  26. ????????}
  27. ????????grid[i][j] = '0'; // 将当前位置标记为已访问(值改为'0')
  28. ????????dfs(grid, i - 1, j, m, n, count); // 上方搜索
  29. ????????dfs(grid, i + 1, j, m, n, count); // 下方搜索
  30. ????????dfs(grid, i, j - 1, m, n, count); // 左方搜索
  31. ????????dfs(grid, i, j + 1, m, n, count); // 右方搜索
  32. ????}
  33. }

在这个程序中,numIslands方法接收一个二维字符数组grid作为输入,返回一个整数,表示该地图中的岛屿数量。dfs方法是实现深度优先搜索的辅助函数。

好的,继续上面的内容。

在上述程序中,numIslands方法是主要的方法,用于计算岛屿的数量。它首先检查输入的二维字符数组是否为空,如果是,则直接返回0。然后,它遍历整个地图,对于每个值为'1'的位置,都调用dfs方法进行深度优先搜索,并将岛屿数量加一。

dfs方法是实现深度优先搜索的辅助函数。它首先检查当前位置是否在地图范围内,以及当前位置的值是否为'1'。如果不是,则直接返回。如果是,则将当前位置标记为已访问(值改为'0'),然后对上、下、左、右四个方向进行递归搜索。

在搜索过程中,如果遇到值为'1'的位置,就继续对该位置进行深度优先搜索。这样,通过递归的方式,可以遍历整个地图,并将所有相邻的岛屿都计数在内。

最后,numIslands方法返回岛屿数量,即所有找到的岛屿的个数。这个值可以用来表示地图中的岛屿分布情况,或者用于其他相关的计算和分析。

需要注意的是,上述程序中使用了DFS算法来遍历地图。这种算法可以有效地解决与图形遍历相关的问题,包括计算岛屿数量、寻找路径等。通过深度优先搜索的方式,可以避免遗漏任何可能的情况,从而得到正确的结果。

文章来源:https://blog.csdn.net/jiazi1024/article/details/135009105
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。