岛屿问题--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';
              }
          }
      }
    }
}



相关推荐
航Hang*2 分钟前
第2章:进阶Linux系统——第4节:配置与管理NFS服务器
linux·运维·服务器·笔记·学习·vmware
wayz116 分钟前
数据分析中的异常值处理:MAD
算法·数据挖掘·数据分析
飞Link10 分钟前
LangGraph 核心架构解析:节点 (Nodes) 与边 (Edges) 的工作机制及实战指南
java·开发语言·python·算法·架构
ZhiqianXia13 分钟前
Pytorch 学习笔记(8): PyTorch FX
pytorch·笔记·学习
Mr_Xuhhh32 分钟前
深入理解二叉树:从数据结构到算法实战
数据结构·算法
xuhaoyu_cpp_java35 分钟前
Boyer-Moore 投票算法
java·经验分享·笔记·学习·算法
kobesdu1 小时前
FAST-LIO2 + 蓝海M300激光雷达:从建图到实时栅格图的完整流程
算法·机器人·ros·slam·fast lio
沪漂阿龙1 小时前
深度剖析神经网络学习:从损失函数到SGD,手写数字识别完整实战
人工智能·神经网络·学习
x_xbx1 小时前
LeetCode:438. 找到字符串中所有字母异位词
算法·leetcode·职场和发展
MThinker1 小时前
K230+canMV+micropython实现低成本MLX90640红外热成像测温模块(续)
算法·智能硬件·micropython·canmv·k230