2025年- H56-Lc164--200.岛屿数量(图论,深搜)--Java版

1.题目描述

2.思路

(1)主函数,存储图结构

(2)主函数,visit数组表示已访问过的元素

(3)辅助函数,用递归(深搜),遍历以已访问过的元素(陆地1)的相邻元素(陆地1)。

补充:深度搜索(递归)

(1)确定递归函数和参数

(2)确定终止条件

(3)单层搜索条件

3.代码实现

java 复制代码
   public int numIslands(char[][] grid) {
        //行数
        int row = grid.length;

        //列数
        int col = grid[0].length;

        // visited 用于记录访问状态
        boolean[][] visited = new boolean[row][col];//所有数组的元素在创建时都会被自动初始化为默认值。

        //岛屿数量初始化
        int cnt = 0;

        //判空处理,整个图为null,行为0,列为0
        if (row == 0 || col == 0 || grid == null) {
            return 0;
        }


        //存储图结构
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) { // 如果当前是陆地且未被访问
                if (grid[i][j] == '1' && visited[i][j] == false)
                //!visited[i][j] 和visited[i][j]==false 等同
                {
                    cnt++;

                    dfs(grid, visited, i, j);// 每次DFS表示一个岛屿

                }
            }
        }
        return cnt;

    }

    // 深度优先搜索,将与当前位置相连的陆地都标记为已访问
    void dfs(char[][] grid, boolean visited[][], int i, int j) {
        int row = grid.length;
        int col = grid[0].length;

        // 越界或不是陆地或已访问,直接返回,切记因为索引是从0开始的,所以i>=row||j>=col
        if (i < 0 || j < 0 || i >= row || j >= col || visited[i][j] == true || grid[i][j] == '0') {
            return;
        }
        // 标记为已访问,把访问过的陆地的相邻陆地标记为已访问过
        visited[i][j] = true;
        dfs(grid, visited, i + 1, j);
        dfs(grid, visited, i - 1, j);
        dfs(grid, visited, i, j + 1);
        dfs(grid, visited, i, j - 1);


    }

    public static void main(String[] args) {
        H200 test = new H200();
        char[][] input = {
                {'1', '1', '1', '1', '0'},
                {'1', '1', '0', '1', '0'},
                {'1', '1', '0', '0', '0'},
                {'0', '0', '0', '0', '0'}

        };
        int numsIsland = test.numIslands(input);
        System.out.print(numsIsland);
        
    }
相关推荐
booooooty5 分钟前
【Java项目设计】基于Springboot+Vue的OA办公自动化系统
java·vue.js·spring boot·毕业设计·课程设计·程序开发
白云如幻5 分钟前
【Java】HQL分页查询
java·hibernate
C语言小火车6 分钟前
【C语言】贪吃蛇小游戏 丨源码+解析
c语言·开发语言·课程设计·c语言游戏·贪吃蛇源码
小猫咪怎么会有坏心思呢28 分钟前
华为OD机考-观看文艺汇演问题-区间问题(JAVA 2025B卷)
java·jvm
极地星光31 分钟前
Qt/C++应用:防御性编程完全指南
开发语言·c++·qt
Love__Tay1 小时前
【Python小练习】3D散点图
开发语言·python·3d
Java初学者小白1 小时前
秋招Day14 - MySQL - SQL优化
java·数据库·sql·mysql
Cyanto1 小时前
Tomcat双击startup.bat闪退的解决方法
java·tomcat
iCxhust1 小时前
一款复古的Intel8088单板机制作
开发语言·单片机·嵌入式硬件
武昌库里写JAVA2 小时前
Vue状态管理实践:使用Vuex进行前端状态管理
java·vue.js·spring boot·课程设计·宠物管理