岛屿问题--bfs的应用--二维网络题目学习



java 复制代码
package siyangyuan;


import java.util.LinkedList;
import java.util.Queue;

/**
 * Class Name :daoyuwenti
 * Package :siyangyuan
 * Description:
 *
 * @Author: Mr.chunxugao
 * Create: 2026-03-15- 18:43
 * @Version:v1.0
 */
public class daoyuwenti {



    public static void main(String[] args) {
      
        char[][] grid = {
                {'1','1','0','0','0'},
                {'1','1','0','0','0'},
                {'0','0','1','0','0'},
                {'0','0','0','1','1'}
        };
        System.out.println(numIslands(grid)); // 输出:3
    }

    //求岛屿的数量
    private static int numIslands(char[][] grid) {
        if (grid==null) return 0;
        //求行数
        int row= grid.length;
        int cow=grid[0].length;//求列数
        int islandcount=0;
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < cow; j++) {
                //要注意这里的字符是单引号
                if (grid[i][j]=='1'){
                    islandcount++;
                    // 3. BFS:把这座岛全部淹没(变成0)
                    BFS(grid,i,j,row,cow);
                }
            }
        }
            return islandcount;
    }

    //bfs淹没陆地
    private static void BFS(char[][] grid, int i, int j, int row, int cow) {
        //bfs需要队列,保存陆地的坐标
        Queue<int[]> queue= new LinkedList<>();
        //对于当前的的第一个元素,直接入队,并且淹没
        queue.offer(new int[]{i,j});
        grid[i][j]='0';

        // 上下左右四个方向(固定写法)
        int[][] dris= {{-1,0},{1,0},{0,-1},{0,1}};
        // BFS循环:和层序遍历完全一样!
      while (!queue.isEmpty()){
          //出队。并且进行淹没
          int[] cur=queue.poll();
          int x=cur[0];
          int y=cur[1];

          //看上下左右有没有陆地进行合并淹没
          for(int[] dir:dris){
                int newx=x+dir[0];
                int newy=y+dir[1];

                //对于这种上下左右的,我们进行判断之后,入队,继续判断,然后符合条件的淹没
              if(newx>=0&&newx<row&&newy>=0&&newy<cow&&grid[newx][newy]=='1'){
                  queue.offer(new int[]{newx,newy});
                  grid[newx][newy]='0';
              }
          }
      }
    }
}



相关推荐
无限进步_2 小时前
【C++】只出现一次的数字 III:位运算的巧妙应用
数据结构·c++·git·算法·leetcode·github·visual studio
北岛寒沫2 小时前
北京大学国家发展研究院 中国经济专题 课程笔记(第一课 绪论)
经验分享·笔记·学习
2401_900151542 小时前
代码覆盖率工具实战
开发语言·c++·算法
进击的小头2 小时前
第8篇:PI控制器设计实战演练
c语言·python·mcu·算法
乌萨奇也要立志学C++2 小时前
【洛谷】图论 图论最短路算法全解:从单源 Dijkstra 到多源 Floyd 模板与实战
算法·图论
AI科技星2 小时前
基于v=c空间本底光速螺旋运动的宏观力方向第一性原理推导:太阳系与地球系统的全维度观测验证
人工智能·线性代数·算法·机器学习·平面
Epiphany.5562 小时前
炸雷!(地址映射+dfs搜索)
算法
王的宝库2 小时前
Go 语言:结构体:定义、初始化、方法、组合、Tag、对齐
开发语言·后端·学习·golang
Crazyong2 小时前
FreeRTOS-互斥量-2
算法