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

代码随想录Day53|102.沉没孤岛 、103.水流问题 、104.建造最大岛屿

102.沉没孤岛  

import java.util.*;class Main{public static int[][] dir = {{0,1},{1,0},{0,-1},{-1,0}};public static void main (String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[][] grid = new int[n][m];for(int i = 0; i <n; i++){for(int j = 0; j<m; j++){grid[i][j] = sc.nextInt();}}boolean[][] visited = new boolean[n][m];for(int i = 0; i < n; i++){if(grid[i][0] == 1 && visited[i][0] == false){dfs(grid,visited,i,0);}if(grid[i][m-1] == 1 && visited[i][m-1] == false){dfs(grid,visited,i,m-1);}}//遍历上下边界for(int j = 0; j <= m-1; j++){if(grid[0][j] == 1 && visited[0][j] == false){dfs(grid,visited,0,j);}if(grid[n-1][j] == 1 && visited[n-1][j] == false){dfs(grid,visited,n-1,j);}}for(int i = 0; i < n; i++){for(int j = 0; j< m; j++){if(grid[i][j] == 1) grid[i][j] = 0;if(grid[i][j] == 2) grid[i][j] = 1;}}for(int i = 0; i < n; i++ ){for(int j = 0; j< m; j++){System.out.print(grid[i][j]+" ");}System.out.println();}}public static void dfs(int[][] grid, boolean[][] visited, int x,int y){if(visited[x][y] == true || grid[x][y] == 0){return;}grid[x][y] = 2;visited[x][y] = true;for(int i = 0; i<4; i++){int nextX = x + dir[i][0];int nextY = y + dir[i][1];if(nextY < 0 || nextY >= grid[0].length || nextX < 0 || nextX >= grid.length){continue;}dfs(grid,visited,nextX,nextY);}}
}

103.水流问题 

import java.util.*;class Main{public static int[][] dir = {{1,0},{0,1},{-1,0},{0,-1}};public static void main (String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[][] grid = new int[n][m];for(int i = 0; i < n; i++){for(int j = 0; j< m; j++){grid[i][j] = sc.nextInt();}}//初始化边界boolean[][] firstBound = new boolean[n][m],secondBound = new boolean[n][m];//遍历左边界和有边界for(int i = 0; i < n; i++){dfs(grid,i,0,firstBound);dfs(grid,i,m-1,secondBound);}//遍历上边界和下边界for(int i = 0; i <m; i++){dfs(grid,0,i,firstBound);dfs(grid,n-1,i,secondBound);}for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(firstBound[i][j] && secondBound[i][j]){System.out.println(i+" " + j);}}}}public static void dfs(int[][] grid,int x,int y,boolean[][] visited){//不能放在遍历里面,否则刚进来第一组没办法变成truevisited[x][y] = true;for(int i = 0; i < 4; i++){int nextX= x + dir[i][0];int nextY = y + dir[i][1];if( nextX <0 || nextX >= grid.length || nextY < 0 || nextY >= grid[0].length || grid[nextX][nextY] < grid[x][y] ||visited[nextX][nextY]){continue;}dfs(grid,nextX,nextY,visited);}}
}

104.建造最大岛屿

import java.util.*;class Main{public static int[][] dirs = {{1,0},{0,1},{-1,0},{0,-1}};static int count = 0;static int tag = 2;public static void main (String[] args) {/* code */Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[][] grid = new int[n][m];boolean[][] visited = new boolean[n][m];for(int i = 0; i< n; i++){for(int j = 0; j< m; j++){grid[i][j] = sc.nextInt();}}boolean totalIsland = true;//遍历记录面积Map<Integer,Integer> countArea = new HashMap<>();for(int i = 0; i<n; i++){for(int j = 0; j< m; j++){if(grid[i][j] == 0) totalIsland = false;if( !visited[i][j] && grid[i][j] != 0){count = 0;dfs(grid,visited,i,j);countArea.put(tag++,count);}}}/*/打印数组for(int i = 0; i< n; i++){for(int j = 0; j< m; j++){System.out.print(grid[i][j] + " ");}System.out.println();}//*/int res = 1;HashSet<Integer> island = new HashSet<>();int flag = 0;//再次遍历添加小岛for(int i = 0; i<n; i++){for(int j = 0; j< m; j++){if(grid[i][j] == 0){int area = 1;island.clear();for(int dir[]:dirs){int nextX = i + dir[0];int nextY = j + dir[1];if(nextX < 0 || nextX >= grid.length || nextY < 0|| nextY >= grid[0].length) continue;flag =grid[nextX][nextY];if(!island.contains(flag) && countArea.containsKey(flag)){area+=countArea.get(flag);island.add(flag);}}res = Math.max(area,res);}}}if(totalIsland == false){System.out.println(res);}else{System.out.println(m*n);}}public static void dfs(int[][] grid, boolean[][] visited, int x, int y){visited[x][y] = true;grid[x][y] = tag;count++;for(int[] dir: dirs){int nextX = x + dir[0];int nextY = y + dir[1];if(nextX < 0 || nextX >= grid.length || nextY < 0|| nextY >= grid[0].length || visited[nextX][nextY] || grid[nextX][nextY] == 0){continue;}dfs(grid, visited, nextX, nextY);}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 程序编译的四个阶段
  • Ubuntu20.04配置NVIDIA+CUDA12.2+CUDNN【附所有下载资源】【亲测有效】【非常详细】
  • docker的核心概念整理:docker-compose
  • Skyvern:基于LLM和CV的开源RPA
  • sudo 命令:掌握系统权限控制,实现安全高效管理
  • 安卓中有main函数吗?
  • Qwen2-VL论文阅读笔记
  • 智慧安防监控EasyCVR视频汇聚管理平台如何修改视频流分辨率?
  • 从零开始之AI面试小程序
  • 网站建设中,JavaScript为什么现在可以做后台了?
  • 【JavaEE】数据链路层协议和DNS
  • Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动
  • 【后端】【语言】【python】python常见操作
  • 【计网】从零开始掌握序列化 --- 基础知识储备与程序重构
  • Elasticsearch黑窗口启动乱码问题解决方案
  • Google 是如何开发 Web 框架的
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • js数组之filter
  • Linux下的乱码问题
  • Mysql数据库的条件查询语句
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • pdf文件如何在线转换为jpg图片
  • php中curl和soap方式请求服务超时问题
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SQLServer插入数据
  • 从零开始在ubuntu上搭建node开发环境
  • 简单数学运算程序(不定期更新)
  • 前端面试总结(at, md)
  • 前端相关框架总和
  • 设计模式 开闭原则
  • 深度学习在携程攻略社区的应用
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • # Panda3d 碰撞检测系统介绍
  • #{} 和 ${}区别
  • #pragma预处理命令
  • (+4)2.2UML建模图
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (接口自动化)Python3操作MySQL数据库
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)scrum常见工具列表
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET 快速重构概要1
  • .NET中使用Protobuffer 实现序列化和反序列化
  • 。。。。。
  • @Documented注解的作用
  • @Pointcut 使用
  • @Transactional 竟也能解决分布式事务?
  • [000-01-022].第06节:RabbitMQ中的交换机介绍