图论part3|101.孤岛的总面积、沉没孤岛、417. 太平洋大西洋水流问题

101. 孤岛的总面积

  • 🔗:101. 孤岛的总面积
  • 思路:和昨天的岛的区别是:是否有挨着边的岛屿
    • 所以可以先遍历四条边挨着的岛屿,把他们标记为非孤岛
    • 再计算其他岛屿当中的最大面积
  • 代码:(深度搜索)
  • import java.util.*;
    /*思路:和岛的区别是:是否有挨着边的岛屿--所以可以先遍历四条边挨着的岛屿,把他们标记为非孤岛--再计算其他岛屿当中的最大面积
    */
    public class Main{public static int count = 0;public static void dfs(int[][] matrix,int i,int j, int aim){// 终止条件if(i>=matrix.length || i<0 || j<0 || j>=matrix[0].length) return;if(matrix[i][j]!=1) return;// markmatrix[i][j] = aim;count++;// 遍历dfs(matrix, i, j-1, aim);dfs(matrix, i, j+1, aim);dfs(matrix, i-1, j, aim);dfs(matrix, i+1, j, aim);}public static void main(String[] args){// N MScanner scanner = new Scanner(System.in);int row = scanner.nextInt();int col = scanner.nextInt();int[][] matrix = new int [row][col];for(int i=0; i<row; i++){for(int j=0; j<col; j++){matrix[i][j] = scanner.nextInt();}}// dfsfor(int i=0; i<row; i++){if(matrix[i][0]==1)dfs(matrix, i, 0, 2);if(matrix[i][col-1]==1)dfs(matrix, i, col-1,2);}for(int j=0; j<col; j++){if(matrix[0][j]==1)dfs(matrix,0,j,2);if(matrix[row-1][j] == 1)dfs(matrix,row-1,j,2);}count=0;for(int i=1; i<row; i++){for(int j=1; j<col; j++){if(matrix[i][j]==1){dfs(matrix, i, j, 3);}}}System.out.println(count);}}

  • 代码:广度搜索
import java.util.*;
/*思路:和岛的区别是:是否有挨着边的岛屿--所以可以先遍历四条边挨着的岛屿,把他们标记为非孤岛--再计算其他岛屿当中的最大面积
*/
public class Main{public static int count = 0;private static final int[][] dir = {{0,1},{1,0},{0,-1},{-1,0}};public static void bfs(int[][] matrix,int r,int c, int aim){// queue, linkedlist// method: poll. add. isEmptyQueue<int[]> que = new LinkedList<>();que.add(new int[]{r,c});matrix[r][c] = aim;count++;while(!que.isEmpty()){int[] cur = que.poll();int row = cur[0];int col = cur[1];for(int i=0; i<4; i++){int nr = row + dir[i][0];int nc = col + dir[i][1];if(nr<0||nc<0||nr>=matrix.length||nc>=matrix[0].length)continue;if(matrix[nr][nc]==1){que.add(new int[]{nr,nc});count++;matrix[nr][nc] = aim;}}}}public static void main(String[] args){// N MScanner scanner = new Scanner(System.in);int row = scanner.nextInt();int col = scanner.nextInt();int[][] matrix = new int [row][col];for(int i=0; i<row; i++){for(int j=0; j<col; j++){matrix[i][j] = scanner.nextInt();}}// bfsfor(int i=0; i<row; i++){if(matrix[i][0]==1)bfs(matrix, i, 0, 2);if(matrix[i][col-1]==1)bfs(matrix, i, col-1,2);}for(int j=0; j<col; j++){if(matrix[0][j]==1)bfs(matrix,0,j,2);if(matrix[row-1][j] == 1)bfs(matrix,row-1,j,2);}count=0;for(int i=1; i<row; i++){for(int j=1; j<col; j++){if(matrix[i][j]==1){bfs(matrix, i, j, 3);}}}System.out.println(count);}}

102. 沉没孤岛

  • 🔗:102. 沉没孤岛
  • 思路:感受不到和上一题太大的区别
  • 代码:(dfs)
    • import java.util.*;
      /*思路:*/
      public class Main{public static void dfs(int[][] matrix,int i,int j, int aim){// 终止条件if(i>=matrix.length || i<0 || j<0 || j>=matrix[0].length) return;if(matrix[i][j]!=1) return;// markmatrix[i][j] = aim;// 遍历dfs(matrix, i, j-1, aim);dfs(matrix, i, j+1, aim);dfs(matrix, i-1, j, aim);dfs(matrix, i+1, j, aim);}public static void main(String[] args){// N MScanner scanner = new Scanner(System.in);int row = scanner.nextInt();int col = scanner.nextInt();int[][] matrix = new int [row][col];for(int i=0; i<row; i++){for(int j=0; j<col; j++){matrix[i][j] = scanner.nextInt();}}// dfsfor(int i=0; i<row; i++){if(matrix[i][0]==1)dfs(matrix, i, 0, 2);if(matrix[i][col-1]==1)dfs(matrix, i, col-1,2);}for(int j=0; j<col; j++){if(matrix[0][j]==1)dfs(matrix,0,j,2);if(matrix[row-1][j] == 1)dfs(matrix,row-1,j,2);}for(int i=0; i<row; i++){for(int j=0; j<col; j++){if(matrix[i][j] == 2)System.out.print(1+" ");elseSystem.out.print(0 + " "); }System.out.print("\n");}}

417. 太平洋大西洋水流问题

  • 🔗:
    417. 太平洋大西洋水流问题https://leetcode.cn/problems/pacific-atlantic-water-flow/
  • 思路:
    • 这一题题目有一点难以理解,当时大体上有了前两题的铺垫还是比较好做的。
    • 题意大概是:左上两条边连接pacific,右下两条边连接Atlantic,雨水可以流向小于等于高度的方向(东南西北),求同时可以流向太平洋和大西洋的方块。
    • 这题可以分成两部分来看,首先找到可以流向pacific的点,然后找到可以流向Atlantic的点,求它们的交集。
      • 存储方式:我一开始想到的是用三维数组进行存储,当时两个二维数组的方式可能更好写一些(没有太大区别)
    • 遍历方式:采用深度优先遍历,遍历过的点都设置为true(有一点像岛屿问题),如果不能延伸则return(返回条件,即相邻岛屿高度<目前岛屿高度)
  • 代码:
    • class Solution {static int[][] dirs = {{-1,0},{1,0},{0,-1},{0,1}};int[][] heights;int m,n;public List<List<Integer>> pacificAtlantic(int[][] heights) {this.heights = heights;this.m = heights.length;this.n = heights[0].length;boolean[][] pacific = new boolean[m][n];boolean[][] atlantic = new boolean[m][n];for(int i=0; i<m; i++){dfs(i, 0, pacific);}    for(int i=0; i<m; i++){dfs(i, n-1, atlantic);}for(int j=1; j<n;j++){dfs(0,j,pacific);}           for(int j=0; j<n-1; j++){dfs(m-1,j,atlantic);}List<List<Integer>> result = new ArrayList<>();for(int i=0; i<m; i++){for(int j=0; j<n; j++){if(pacific[i][j] && atlantic[i][j]){List<Integer> cell = new ArrayList<>();cell.add(i);cell.add(j);result.add(cell);}}}return result;}public void dfs(int row, int col, boolean[][] ocean){if(ocean[row][col]) return;ocean[row][col] = true;for(int[] dir:dirs){int newRow = row + dir[0];int newCol = col + dir[1];if(newRow>=0 && newCol>=0 && newRow<m && newCol<n && heights[newRow][newCol]>=heights[row][col]){dfs(newRow, newCol, ocean);}}}
      }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/72562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AP AR

混淆矩阵 真实值正例真实值负例预测值正例TPFP预测值负例FNTN &#xff08;根据阈值预测&#xff09; P精确度计算&#xff1a;TP/(TPFP) R召回率计算&#xff1a;TP/(TPFN) AP 综合考虑P R 根据不同的阈值计算出不同的PR组合&#xff0c; 画出PR曲线&#xff0c;计算曲线…

Ubuntu上部署Flask+MySQL项目

一、服务器安装python环境 1、安装gcc&#xff08;Ubuntu默认已安装&#xff09; 2、安装python源码 wget https://www.python.org/ftp/python/3.13.2/Python-3.13.2.tar.xz 3、安装Python依赖库 4、配置python豆瓣源 二、服务器安装虚拟环境 1、安装virtualenv pip3.10 ins…

深度学习有哪些算法?

深度学习包含多种算法和模型&#xff0c;广泛应用于图像处理、自然语言处理、语音识别等领域。以下是主要分类及代表性算法&#xff1a; 一、基础神经网络 多层感知机&#xff08;MLP&#xff09; 最简单的深度学习模型&#xff0c;由多个全连接层组成&#xff0c;用于分类和回…

【css酷炫效果】纯CSS实现按钮流光边框

【css酷炫效果】纯CSS实现按钮流光边框 缘创作背景html结构css样式完整代码效果图 【css酷炫效果】纯CSS实现按钮流光边框。 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90490501 缘 创作随缘&#xff0c;不定时更…

【Android】ListView控件在进入|退出小窗下的异常

1&#xff0c;描述 页面使用了ListView控件&#xff0c;随后进入小窗模式&#xff0c;导致视图遮挡 2&#xff0c;根源 ListView虽然进入小窗relayout&#xff0c;其measureChild高度比全屏下要小&#xff0c;但是&#xff0c;其内部使用了Recycler机制&#xff0c;缓存了ite…

基于ssm的电子病历系统(全套)

一、系统架构 前端&#xff1a;jsp | bootstrap | jquery 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | tomcat | idea 二、代码及数据库 三、功能介绍 01. 登录 02. 主页 03. 管理员-个人中心-修改密码…

使用STM32CubeMX+DMA+空闲中断实现串口接收和发送数据(STM32G070CBT6)

1.STM32CubeMX配置 &#xff08;1&#xff09;配置SYS &#xff08;2&#xff09;配置RCC &#xff08;3&#xff09;配置串口&#xff0c;此处我用的是串口4&#xff0c;其他串口也是一样的 &#xff08;4&#xff09;配置DMA&#xff0c;将串口4的TX和RX添加到DMA中 &#…

LabVIEW VI Scripting随机数波形图自动生成

通过LabVIEW VI Scripting 技术&#xff0c;实现从零开始编程化创建并运行一个随机数波形监测VI。核心功能包括自动化生成VI框架、添加控件与函数、配置数据流逻辑及界面布局优化&#xff0c;适用于批量生成测试工具、教学模板开发或复杂系统的模块化构建。通过脚本化操作&…

HTML 列表:构建清晰结构的网页内容

引言 在网页开发过程中&#xff0c;将信息有条理地呈现给用户至关重要。HTML 列表作为一种强大的工具&#xff0c;能够使内容更加结构化和易于阅读。HTML 提供了有序列表、无序列表和自定义列表三种类型&#xff0c;满足不同场景下的内容展示需求。本文将深入探讨这三种列表的…

如何在电脑上使用 Jupyter Notebook 通过 SSH 远程连接树莓派Zero

有无数种方式通过SSH远程连接树莓派&#xff0c;但对于树莓派Zero 2W这种硬件资源有限的板子&#xff0c;因为内存有限Pycharm干脆不能通过SSH连接树莓派Zero 2W。VScode通过SSH连接时&#xff0c;也会因为资源有限时常断线。因此&#xff0c;我们就要用轻量级的编辑器Jupyter …

JS超过Number的最大值

场景&#xff1a;用户输入(这个可以通过前端限制输入长度控制)或正规场景&#xff0c;大数据量展示 Number类型的最大值是2^53 - 1 解决方案一&#xff1a;BigInt BigInt 是 JavaScript 中专门用来表示任意精度整数的类型。它允许你处理超出 Number 范围的整数。 const bigNu…

SpringBoot之一个注解完成所有类型的文件下载!

下载功能应该是比较常见的功能了&#xff0c;每个项目里都会有&#xff0c;简单的下载不难但是代码多也麻烦&#xff0c;对于复杂的下载代码更多更是麻烦。 如果我说现在只需要一个注解就能帮你下载任意的对象&#xff0c;是不是觉得非常的方便 Download(source "classp…

WebAssembly 技术在逆向爬虫中的应用研究

一、引言 1.1 Web 技术发展与性能需求 在当今数字化浪潮中,Web 应用已成为人们生活和工作中不可或缺的一部分。从简单的静态网页到功能复杂的单页面应用(SPA),Web 技术的发展日新月异。随着用户对 Web 应用交互性、实时性和复杂性的要求不断提高,传统的 Web 开发技术面临着…

解决 openeuler 系统 docker 下载慢,docker 镜像加速

一、步骤说明 1. 编辑 Docker 配置文件 Docker 的镜像源配置文件路径为 /etc/docker/daemon.json。如果该文件不存在&#xff0c;则需要先创建目录和文件。 # 创建目录&#xff08;如果不存在&#xff09; sudo mkdir -p /etc/docker# 编辑配置文件&#xff08;使用 nano 或…

python项目一键加密,极度简洁

在要加密的项目内运行python -m pip install py2safe 安装后cd到项目的根目录,运行py2safe 它会递归加密所有文件夹,不需要参数,拿过来就用,基于pyarmor开发,基本破解不了,太方便辣 这是readme文件,不仅提到了用法,还贴心的加入了口腔溃疡的治疗办法,真是太贴心了 # py2saf…

JavaScript 中的包装类型:概念、作用与使用场景

文章目录 引言1. 什么是包装类型&#xff1f;1.1 包装类型的定义1.2 包装类型的作用 2. 包装类型的使用2.1 自动装箱&#xff08;Autoboxing&#xff09;示例 2.2 手动创建包装对象示例 3. 包装类型的特性3.1 包装对象的生命周期示例 3.2 基本类型与包装对象的区别示例 4. 包装…

react18 核心知识点杂记1

类组件 如何渲染为真实dom 入口&#xff1a; const root ReactDOM.createRoot(document.getElementById(root))root.render(类组件)⬇️ 类组件内部render() {return (<div>12</div>)}⬇️ (经过babel-preset-react-app 把jsx语法&#xff0c;编译为h函数形式) R…

Matlab 汽车传动系统的振动特性分析

1、内容简介 Matlab 186-汽车传动系统的振动特性分析 可以交流、咨询、答疑 2、内容说明 略 摘要&#xff1a;汽车动力传动系统是一个具有多自由度的、连续的、有阻尼系统。传动系统的振动主要有横向振动、扭转振动、纵向振动。并且汽车传动系统的扭转振动是一个非常重要的振…

JDBC技术基础

文章目录 1. JDBC概述1.1 数据的持久化1.2 Java中的数据存储技术1.3 JDBC介绍1.4 JDBC体系结构1.5 JDBC程序编写步骤 2. 获取数据库连接2.1 引入JAR包2.2 要素一&#xff1a;Driver接口实现类2.2.1 Driver接口介绍2.2.2 加载与注册JDBC驱动 2.3 要素二&#xff1a;URL2.4 要素三…

Matlab自学笔记四十八:各类型缺失值的创建、判断、替换、移位和处理方法

1.各类数据缺失值的创建 程序示例如下&#xff1a; a[nan 1 2 3] %数值型缺失值 s[string(missing) "a" "b"] %字符串型缺失值 t[NaT datetime(2018,8,8)] %时间型缺失值 isnan(a) %判断数值型缺失值 运行结果&#xff1a; a NaN 1 2 …