当前位置: 首页 > news >正文

Day 56 || 99.岛屿数量、100.岛屿的最大面积

99.岛屿数量

题目链接:卡码网题目链接(ACM模式)

思路:深度搜索遍历整个二维数组当找到岛屿后,标记这个岛屿,岛屿总数量加一然后遍历这个点位的上下左右有没有1,然后递归这些1并标记,直到都是0为止,然后继续遍历二维数组跳已经遍历的熬的岛屿。

import java.util.Scanner;
public class Main{int[][] dir = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};public static void main (String[] args) {Main main = new Main();Scanner scanner = new Scanner(System.in);int x = scanner.nextInt();int y= scanner.nextInt();int[][] grid = new int[x][y];for(int i=0;i<x;i++){for(int j=0;j<y;j++){grid[i][j] = scanner.nextInt();} }int res = 0;for(int i=0;i<x;i++){for(int j=0;j<y;j++){if(grid[i][j]==1){grid[i][j] = 2;res++;main.die(grid,i,j); }}}System.out.println(res);       }public void die(int[][] grid,int x ,int y){for (int p = 0; p < 4; p++) { // 遍历当前节点的四个方向int nextx = x + dir[p][0];int nexty = y + dir[p][1]; // 获取周围四个方向的坐标// 检查边界条件if (nextx < 0 || nextx >= grid.length || nexty < 0 || nexty >= grid[0].length) {continue; // 坐标越界,跳过}// 如果节点未被访问过if (grid[nextx][nexty] == 1) {grid[nextx][nexty]=2;die(grid,nextx,nexty);}}}
}

广度搜索类似遍历二维数组,只不过是遇到1之后标记这个点,然后表用方法这个方法是使用搞一个队列来讲这个一周围的1都标记好变成一个小岛。

import java.util.Scanner;
import java.util.Stack;
import java.util.Map;
import java.util.AbstractMap;
public class Main{int[][] dir = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};public static void main (String[] args) {Main main = new Main();Scanner scanner = new Scanner(System.in);int x = scanner.nextInt();int y= scanner.nextInt();int[][] grid = new int[x][y];for(int i=0;i<x;i++){for(int j=0;j<y;j++){grid[i][j] = scanner.nextInt();} }int res = 0;for(int i=0;i<x;i++){for(int j=0;j<y;j++){if(grid[i][j]==1){grid[i][j]=2;res++;main.die(grid,i ,j);}} }System.out.println(res);       }public void die(int[][] grid,int startX ,int startY){Stack<Map.Entry<Integer, Integer>> stack = new Stack<>();stack.push(new AbstractMap.SimpleEntry<>(startX, startY));while(!stack.isEmpty()){Map.Entry<Integer, Integer> entry = stack.pop();int x = entry.getKey();int y = entry.getValue();for (int p = 0; p < 4; p++) { // 遍历当前节点的四个方向int nextx = x + dir[p][0];int nexty = y + dir[p][1]; // 获取周围四个方向的坐标// 检查边界条件if (nextx < 0 || nextx >= grid.length || nexty < 0 || nexty >= grid[0].length) {continue; // 坐标越界,跳过}// 如果节点未被访问过if (grid[nextx][nexty] == 1) {grid[nextx][nexty]=2;stack.push(new AbstractMap.SimpleEntry<>(nextx , nexty));}}}}
}

100.岛屿的最大面积 

题目链接:卡码网题目链接(ACM模式)

思路:和之前求岛屿一样,main里设定一个large变量用来存储最大面用max来判断遇到的岛屿和目前已知岛屿大小,广度或者深度搜索中新增变量同时新怎搞一个传参用来传递岛屿的大小,只要遇到一个1当前岛屿面积增大1。


http://www.mrgr.cn/news/68863.html

相关文章:

  • 如何在Typora中使用copilot
  • CSS transform动画
  • 设计模式-七个基本原则之一-接口隔离原则 + SpringBoot案例
  • STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55
  • mac m1 docker本地部署canal 监听mysql的binglog日志
  • C++【string类,模拟实现string类】
  • 【鉴权】深入了解 Cookie:Web 开发中的客户端存储小数据
  • 计算机毕业设计Python+Neo4j中华古诗词可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析 PyTorch Tensorflow LSTM
  • RK3568平台开发系列讲解(设备树篇)设备树中CPU描述
  • //二维数组的遍历方式
  • pandas习题 054:将两个 DataFrame 导出到 Excel 的不同表
  • 【系统集成项目管理工程师】英语词汇对照表-项目管理类
  • Kubernetes 调度器调度策略的资源分配不均问题如何解决?
  • stm8开发笔记--STVD开发软件的安装
  • 针对oneplus6 怎么选择lineage源码的什么分支
  • vue3中配置svg图标
  • 公开仓库改私有再配置公钥后Git拉取仍需要输入用户名的问题
  • 【Linux】一篇文章轻松搞懂基本指令
  • 大牛直播SDK如何实现Android平台多路RTSP播放?
  • Python 连接 Redis 进行增删改查(CRUD)操作
  • Python venv 虚拟环境 相关 Windows环境 2024 /11/9
  • 什么是Flutter,有什么特点
  • 使用多种机器学习调参模型进行二分类建模的全流程教程,代做分析
  • 我自己nodejs练手时常用的一些库基础用法
  • 嵌入式ARM平台Linux网络实时性能优化
  • vue3框架还需要学习什么