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

day50 图论章节刷题Part02(99.岛屿数量 深搜、99.岛屿数量 广搜、100.岛屿的最大面积)

前言:前段时间论文开题落下了很多进度,今天开始会尽快赶上

99.岛屿数量 深搜

思路:对地图进行遍历遇到一个没有遍历过的陆地节点,计数器就+1,并把该节点所能遍历到的陆地都标记上;遇到标记过的陆地节点和海洋节点的时候直接跳过。

代码如下:

import java.util.Scanner;
public class Main{//定义前进的方向public static int[][] dir={{0,1},{1,0},{-1,0},{0,-1}};//深度搜索函数public static void dfs(boolean[][] visited,int[][] grid,int x,int y){for(int i=0;i<4;i++){int nextX=x+dir[i][0];int nextY=y+dir[i][1];if(nextX<0 || nextY<0 || nextX>=grid.length || nextY>=grid[0].length) continue;if(!visited[nextX][nextY] && grid[nextX][nextY]==1){visited[nextX][nextY]=true;dfs(visited,grid,nextX,nextY);}}}public static void main (String[] args) {//构建地图Scanner scan = new Scanner(System.in);int n=scan.nextInt();int m=scan.nextInt();int[][] grid=new int[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){grid[i][j]=scan.nextInt();}}//判断是否为岛屿int result=0;boolean[][] visited=new boolean[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(!visited[i][j] && grid[i][j]==1){result++;visited[i][j]=true;dfs(visited,grid,i,j);}}}System.out.println(result);}
}

99.岛屿数量 广搜

注意:要在节点加入队列时就标记走过,如果从队列拿出来的时候再标记走过就会导致很多节点重复加入队列。

广度搜索使用队列存放下一层搜索的节点,与DFS的区别是不需要调用自身,把队列中的元素遍历完即可。

代码如下:

import java.util.*;
class Pair{int x;int y;public Pair(int x, int y) {this.x = x;this.y = y;}
}public class Main{//定义前进的方向public static int[][] dir={{0,1},{1,0},{-1,0},{0,-1}};public static void bfs(boolean[][] visited,int[][] grid,int x,int y){Queue<Pair> queue=new LinkedList<>();queue.add(new Pair(x,y));visited[x][y]=true;while(!queue.isEmpty()){Pair cur=queue.poll();int curX=cur.x;int curY=cur.y;for(int i=0;i<4;i++){int nextX=curX+dir[i][0];int nextY=curY+dir[i][1];if(nextX<0 || nextY<0 || nextX>=grid.length || nextY>=grid[0].length) continue;if(!visited[nextX][nextY] && grid[nextX][nextY]==1){queue.add(new Pair(nextX,nextY));visited[nextX][nextY]=true;}}}}public static void main (String[] args) {Scanner scan = new Scanner(System.in);int n=scan.nextInt();int m=scan.nextInt();int[][] grid=new int[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){grid[i][j]=scan.nextInt();}}int result=0;boolean[][] visited=new boolean[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(!visited[i][j] && grid[i][j]==1){result++;bfs(visited,grid,i,j);}}}System.out.println(result);}
}

100.岛屿的最大面积

思路:只需要在标记一个陆地节点周边所有陆地节点时对这个岛屿的面积计数即可,最后比较获得最大的面积。使用全局静态变量count来计数。

dfs只处理下一个节点,即在主函数遇到岛屿就计数为1,dfs处理接下来的相邻陆地.

代码如下:

import java.util.Scanner;
public class Main{//定义前进的方向public static int[][] dir={{0,1},{1,0},{-1,0},{0,-1}};public static int count;//深度搜索函数public static void dfs(boolean[][] visited,int[][] grid,int x,int y){for(int i=0;i<4;i++){int nextX=x+dir[i][0];int nextY=y+dir[i][1];if(nextX<0 || nextY<0 || nextX>=grid.length || nextY>=grid[0].length) continue;if(!visited[nextX][nextY] && grid[nextX][nextY]==1){visited[nextX][nextY]=true;count++;dfs(visited,grid,nextX,nextY);}}}public static void main (String[] args) {//构建地图Scanner scan = new Scanner(System.in);int n=scan.nextInt();int m=scan.nextInt();int[][] grid=new int[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){grid[i][j]=scan.nextInt();}}//判断是否为岛屿boolean[][] visited=new boolean[n][m];int result=0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(!visited[i][j] && grid[i][j]==1){count=1;visited[i][j]=true;dfs(visited,grid,i,j);}if(count>result) result=count;}}System.out.println(result);}
}

相关文章:

day50 图论章节刷题Part02(99.岛屿数量 深搜、99.岛屿数量 广搜、100.岛屿的最大面积)

前言&#xff1a;前段时间论文开题落下了很多进度&#xff0c;今天开始会尽快赶上 99.岛屿数量 深搜 思路&#xff1a;对地图进行遍历遇到一个没有遍历过的陆地节点&#xff0c;计数器就1&#xff0c;并把该节点所能遍历到的陆地都标记上&#xff1b;遇到标记过的陆地节点和海…...

超详细从基准将VMware ESXi 升级到 vSphere 6.7U1教程

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;&#xff0c;收不到通知请将我点击星标&#xff01; “ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福…...

华为OD机试 - 打印机队列 - 优先队列(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…...

MatrixOne 助力西安天能替换MySQL+MongoDB+ES打造一体化物联网平台

物联网&#xff08;IoT&#xff09;时代&#xff0c;企业正以前所未有的速度加快数字化转型。西安天能软件科技有限责任公司&#xff08;Skyable&#xff09;作为工业物联网领域的领先企业&#xff0c;携手MatrixOne&#xff0c;共同构建新一代一体化物联网平台&#xff0c;实现…...

正则表达式---元字符

简介 正则表达式分为两种语法&#xff1a;POSIX标准的语法&#xff0c;Perl语法。 正则表达式的POSIX规范&#xff0c;分为基本型正则表达式&#xff08;Basic Regular Expression, BRE&#xff09;&#xff0c;扩展型正则表达式&#xff08;Extended Regular Expression&…...

数据库Redis篇

系列文章目录 第一章 C/C语言篇第二章 计算机网络篇第三章 操作系统篇第四章 数据库MySQL篇第五章 数据库Redis篇第六章 场景题/算法题第七篇 常见HR问题篇 本系列专栏&#xff1a;点击进入 后端开发面经 关注走一波 秋招阶段&#xff0c;面过很多大中小厂&#xff0c;积攒了…...

在区块链技术中,什么是权益证明(PoS)?

权益证明&#xff08;Proof of Stake, PoS&#xff09;是一种与工作量证明&#xff08;Proof of Work, PoW&#xff09;类似的共识机制&#xff0c;但它通过不同的方式来确保区块链网络的安全性和一致性。PoS的主要目标是解决PoW中存在的高能耗问题&#xff0c;并提高网络的扩展…...

Spring Boot——日志介绍和配置

1. 日志的介绍 在前面的学习中&#xff0c;控制台上打印出来的一大堆内容就是日志&#xff0c;可以帮助我们发现问题&#xff0c;分析问题&#xff0c;定位问题&#xff0c;除此之外&#xff0c;日志还可以进行系统的监控&#xff0c;数据采集等 2. 日志的使用 在程序中获取日…...

Python实现全国岗位招聘信息可视化分析(源码+论文+部署讲解)

项目源码&数据源获取 利用Python实现全国岗位招聘信息可视化分析 项目背景&#xff1a; 1.为企业招聘决策提供科学的依据和参考&#xff0c;可以帮助人力资源部门、招聘机构和求职者了解当前的就业形势、行业趋势和人才需求&#xff0c;从而做出更明智的招聘和求职决策。…...

【真题笔记】16年系统架构设计师要点总结

【真题笔记】16年系统架构设计师要点总结 存储部件接口嵌入式处理器产品配置配置管理用户文档系统文档CMM&#xff08;能力成熟度模型&#xff09;螺旋模型敏捷软件开发的方法学软件工具面向对象的分析模型设计模型COP&#xff08;面向构件的编程&#xff09;构件原子构件模块S…...

2024 CSS保姆级教程二 - BFC详解

前言 - CSS中的文档流 在介绍BFC之前&#xff0c;需要先给大家介绍一下文档流。​ 我们常说的文档流其实分为定位流、浮动流、普通流三种。​ ​ 1. 绝对定位(Absolute positioning)​ 如果元素的属性 position 为 absolute 或 fixed&#xff0c;它就是一个绝对定位元素。​ 在…...

Knowledge-refined Denoising Network for Robust Recommendation

Knowledge-refined Denoising Network for Robust Recommendation&#xff08;Sigir23&#xff09; 摘要 知识图&#xff08;KG&#xff09;包含丰富的边信息&#xff0c;是提高推荐性能和可解释性的重要组成部分。然而&#xff0c;现有的知识感知推荐方法直接在KG和用户-项目…...

轴流风机和后倾式风机的安装要求

后向离心风机风压大&#xff0c;风量足&#xff0c;安装方便。因为不需要蜗壳&#xff0c;所以风道往往需要自行设计&#xff0c;而风道的合理与否&#xff0c;大大影响了后向离心风机的效率。那么后向离心风机的安装技巧有哪些&#xff1f;怎样达到风机的最佳使用效果呢&#…...

代码笔录1

10-16 出入栈序列是否合法 // // Created by 86184 on 2024/10/16. // #include <stdio.h>//IIOOOIO int jude(char s[]) {int count 0, i 0;while (s[i] ! \0) {if (s[i] I) count;else if (s[i] O) count--;else return 0;if (count < 0) return 0;i;}if (cou…...

强网杯2024 Web WP

强网杯2024 参考链接&#xff1a;https://mp.weixin.qq.com/s/Mfmg7UsL4i9xbm3V3e5HMA https://mp.weixin.qq.com/s/vV_II8TpyaGL4HUlUS57RQ PyBlockly 源码&#xff1a; from flask import Flask, request, jsonify import re import unidecode import string import ast …...

《双指针篇》---盛最多水的容器_Java(中等但简单)

题目传送门 1.首先计算出暂时的盛水体积 2.求暂时体积和最大体积max的最大值 3.更新right和left。如果height[left] > height[right] 那么right--否则left; class Solution {public int maxArea(int[] height) {int left 0,right height.length-1; int ret 0;while (lef…...

Linux: network: 环境:网络burst的一个原因,虚拟机感染病毒导致,外部网络设备太忙

最近碰到一个问题&#xff0c;测试人员在测试一周内的产品稳定性&#xff0c;带有的业务非常大。 总是不能满足需要的时长&#xff0c;总是在一段时间内出现丢包&#xff0c;业务出现错误的现象。从tshark/tcpdump的抓包看&#xff0c;确实在某个时间段&#xff0c;有一次十几秒…...

idea使用Translation插件实现翻译

1.打开idea&#xff0c;settings&#xff0c;选择plugins&#xff0c;搜索插件Translation&#xff0c;安装 2.选择翻译引擎 3.配置引擎&#xff0c;以有道词典为例 3.1 获取应用ID&#xff0c;应用秘钥 3.1.1 创建应用 点击进入有道智云控制台 3.1.2 复制ID和秘钥 3.2 idea设…...

[OS] sys_mmap() 函数+

流程图分析 1. 调用 sys_mmap() 步骤&#xff1a;当用户程序调用 mmap() 时&#xff0c;操作系统会进入 sys_mmap() 函数。作用&#xff1a;这是整个 mmap() 操作的入口。系统调用的实现从这里开始。 2. 提取参数&#xff08;Fetch Argument&#xff09; 步骤&#xff1a;从…...

轧钢机辊道多电动机传动控制系统

轧钢机辊道多电动机传动控制系统是一种复杂的工业自动化系统&#xff0c;主要用于控制轧钢车间中多个电动机驱动的辊道&#xff0c;以实现轧件的高效、稳定输送和加工。以下是对该系统的详细介绍&#xff1a; 系统组成 轧线辊道TDC控制器&#xff1a;作为系统的核心控制单元&a…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用&#xff0c;前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率&#xff0c;还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库&#xff08;Naive UI、Element …...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...