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



相关推荐
Gigavision24 分钟前
基于BUAA-MIHR数据集的噪声解耦对比学习算法
人工智能·python·深度学习·算法
鹿角片ljp35 分钟前
LeetCode 64:最小路径和复盘|二维 DP 与 ACM 模式完整写法
java·数据结构·算法
彧azz2 小时前
算法设计与分析:贪心与动态规划
数据结构·学习·算法·贪心算法·动态规划
Beyond_System|系统之外3 小时前
【学编程】Python基础编程题100道(21-60)
开发语言·python·算法
一条小小yu4 小时前
基于数据库唯一索引 + 过期时间的分布式锁
学习
传奇开心果编程4 小时前
【ArkUI 练中学】第15课:UI 界面设计与实战
学习·ui·华为·harmonyos
漂流瓶jz4 小时前
UVA-1442 洞穴 题解答案代码 算法竞赛入门经典第二版
c++·算法·题解·aoapc·算法竞赛入门经典·uva
传奇开心果编程6 小时前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习
叠层归一研究院6 小时前
基于极限自指的叠层归一宇宙结构理论——无元外部封闭系统的内生区分模型
人工智能·经验分享·算法·agi
扶风ff6 小时前
练题簿小程序:家庭在线练题,课后复习更简单
学习·小程序