2024/3/16打卡全球变暖(第九届蓝桥杯)——dfs/bfs

题目

你有一张某海域 N×N 像素的照片,”.”表示海洋、”#”表示陆地,如下所示:

.......
.##....
.##....
....##.
..####.
...###.
.......

其中”上下左右”四个方向上连在一起的一片陆地组成一座岛屿,例如上图就有 2 座岛屿。

由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。

具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。

例如上图中的海域未来会变成如下样子:

.......
.......
.......
.......
....#..
.......
.......

请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。

输入格式

第一行包含一个整数N。

以下 N 行 N 列,包含一个由字符”#”和”.”构成的 N×N 字符矩阵,代表一张海域照片,”#”表示陆地,”.”表示海洋。

照片保证第 1 行、第 1 列、第 N 行、第 N 列的像素都是海洋。

输出格式

一个整数表示答案。

数据范围

1≤N≤1000

输入样例1:

7
.......
.##....
.##....
....##.
..####.
...###.
.......

输出样例1:

1

输入样例2:

9
.........
.##.##...
.#####...
.##.##...
.........
.##.#....
.#.###...
.#..#....
.........

输出样例2:

1

 

思路

        很明显,这是一个连通块问题,用基础搜索即可解决。bfs和dfs都可

        遍历一个连通块(找到这个连通块中所有的’#‘,并标记已经搜过,不用再搜);再遍历下一个连通块…;遍历完所有连通块,统计有多少个连通块。

        回到题目,什么岛屿不会被完全淹没?若岛中有个陆地(称为高地),它周围都是陆地,那么这个岛不会被完全淹没。
  用DFS或BFS搜出有多少个岛(连通块),并且在搜索时统计那些没有高地的岛(连通块)的数量,就是答案。
  因为每个像素点只用搜一次且必须搜一次,所以复杂度是O(n^2)。

 

代码

dfs

import java.util.*;
import java.io.*;class Main{static int flag; // 使用flag记录该各连通块是否被完全淹没static int ans;static int[] dx = {0,1,0,-1};static int[] dy = {1,0,-1,0};static char[][] c = new char[1010][1010];static boolean[][] st = new boolean[1010][1010]; // 标记岛屿是否被搜过static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static int n;public static void main(String[] args) throws Exception{n = Integer.parseInt(in.readLine());for(int i=0;i<n;i++){String s = in.readLine();for(int j=0;j<n;j++)c[i][j] = s.charAt(j);}// 对每个点都要进行遍历一遍,看其是否是#且没有被搜过,那么就对这个连通块进行dfs搜索for(int i=1;i<n-1;i++){for(int j=1;j<n-1;j++){if(c[i][j]=='#'&&st[i][j]==false){flag = 0;dfs(i,j);if(flag==0) ans++; }}}System.out.println(ans);}public static void dfs(int i,int j){st[i][j] = true;if(c[i-1][j]=='#'&&c[i+1][j]=='#'&&c[i][j-1]=='#'&&c[i][j+1]=='#') //如果四周都是陆地,则表明这块连通块不会被完全淹没flag = 1;for(int k=0;k<4;k++){ // 对四周的陆地再进行处理int x = i+dx[k];int y = j+dy[k];if(x>=0&&x<n&&y>=0&&x<n&&c[x][y]=='#'&&st[x][y]==false)dfs(x,y);}return;}
}

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

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

相关文章

4.如何通过组策略给所有电脑挂载共享文件路径?AD域控如何给所有加域的电脑挂载共享文件夹路径?

&#xff08;1&#xff09;如何将一个文件夹设置为共享文件&#xff1f; 步骤如下&#xff1a; 1.找到你想共享的文件夹。 2.右键单击该文件夹&#xff0c;选择“属性”选项。 3.在文件夹属性窗口中&#xff0c;切换到“共享”选项卡。 4.点击“共享此文件夹”复选框&…

智慧城市与数字孪生:共创未来城市的智慧生活

目录 一、智慧城市与数字孪生的概念与特点 二、智慧城市与数字孪生共创智慧生活的路径 1、城市规划与建设的智能化 2、城市管理与服务的智慧化 3、城市安全与应急管理的智能化 三、智慧城市与数字孪生面临的挑战与对策 四、智慧城市与数字孪生的发展趋势与展望 1、技术…

React懒加载

文章目录 定义如何使用Suspense 定义 React.lazy 函数能让你像渲染常规组件一样处理动态引入&#xff08;的组件&#xff09;。 (1) 为什么代码要分割 当你的程序越来越大&#xff0c;代码量越来越多。一个页面上堆积了很多功能&#xff0c;也许有些功能很可能都用不到&#x…

Oracle SQL优化基本概念:直方图

在Oracle数据库中&#xff0c;直方图&#xff08;Histograms&#xff09;是优化器用于收集和存储列数据分布统计信息的一种机制。直方图主要用于解决SQL查询优化中的问题&#xff0c;尤其是当表的某一列数据分布不均匀或存在大量重复值时。 正常情况下&#xff0c;如果没有直方…

SQL-Labs靶场“32-33”关通关教程

君衍. 一、32关 GET单引号闭合宽字节注入1、源码分析2、宽字节注入原理3、联合查询注入4、updatexml报错注入5、floor报错注入 二、33关 GET单引号addslashes逃逸注入1、源码分析2、联合查询注入3、updatexml报错注入4、floor报错注入 SQL-Labs靶场通关教程&#xff1a; SQL注入…

安装python、pycharm,打好基础,准备飞起

python安装使用 安装python安装包 以下为自定义安装python安装包&#xff0c;无特殊要求可直接进行安装。 勾选Add Python 3.6 to PATH&#xff0c; 然后点击 Customize installation&#xff0c;进行自定义安装。 所有的都勾上&#xff0c;然后点击Next。 可选择自己需要…

阿里提前批(阿里云)一面30min

今日分享阿里云一面&#xff0c;给要准备就业的宝子们一点方向 1、自我介绍与项目介绍 2、八股文 Java的特性、Java的oop&#xff1f; Java有哪些方法来实现线程安全&#xff1f; 讲讲Spring中的AOP与IOC&#xff1f; synchronized锁怎么用&#xff1f; Mysql中右模糊查询用…

(附数据集)基于lora参数微调Qwen1.8chat模型的实战教程

基于lora微调Qwen1.8chat的实战教程 日期&#xff1a;2024-3-16作者&#xff1a;小知运行环境&#xff1a;jupyterLab描述&#xff1a;基于lora参数微调Qwen1.8chat模型。 样例数据集 - qwen_chat.json&#xff08;小份数据&#xff09; - chat.json&#xff08;中份数据&…

Day39:安全开发-JavaEE应用SpringBoot框架Actuator监控泄漏Swagger自动化

目录 SpringBoot-监控系统-Actuator SpringBoot-接口系统-Swagger 思维导图 Java知识点&#xff1a; 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&#xff0c;第三方组件使用等. 框架库&#xff1a;MyB…

hot100 -- 矩阵

&#x1f442; Peter Pan - kidult. - 单曲 - 网易云音乐 &#x1f442; Bibliothque&#xff08;图书馆&#xff09; - Jasing Rye - 单曲 - 网易云音乐 目录 &#x1f33c;前言 &#x1f33c;二分模板 &#x1f382;矩阵置零 AC 标记数组 AC 标记变量 &#x1f6a9;…

【JAVA】JAVA方法的学习和创造

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

阿里云分布式深度学习训练架构Whale

阿里云分布式深度学习训练架构Whale 阿里云分布式深度学习训练架构Whale 参考文献 Whale 基于 Tensorflow 深度学习分布式训练框架|学习笔记Whale: Efficient Giant Model Training over Heterogeneous GPUs阿里云机器学习平台 PAI 论文高效大模型训练框架 Whale 入选 USENIX A…

【04】WebAPI

WebAPI 和标准库不同,WebAPI 是浏览器提供的一套 API,用于操作浏览器窗口和界面 WebAPI 中包含两个部分: BOM:Browser Object Model,浏览器模型,提供和浏览器相关的操作DOM:Document Object Model,文档模型,提供和页面相关的操作BOM BOM 提供了一系列的对象和函数,…

OpenCV 环境变量参考

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a; OpenCV4.9.0配置选项参考 下一篇&#xff1a;OpenCV4.9.0配置选项参考 引言&#xff1a; OpenCV是一个广泛使用的图像和视频处理开源库&#xff0c;拥有丰富的图像算法和函…

JS:轮播图终极版

轮播图&#xff1a;可触发效果 &#xff1a;1、按箭头符号可左右切换图片 2、到最后一张的下一张是开头第一张&#xff1b;开头第一张的前一张是最后一张 3、鼠标放在轮播图上时轮播图停止定时器&#xff1b;鼠标移开定时器继续开启 注意&#xff1a;图片需要自己准备且对应…

Lua中文语言编程源码-第三节,更改lualib.h Lua标准库, 使Lua支持中文关键词(与所有的基础库相关)

源码已经更新在CSDN的码库里&#xff1a; git clone https://gitcode.com/funsion/CLua.git 在src文件夹下的lualib.h&#xff0c;是Lua的标准库模块。 Lua标准库一共有有个10个库&#xff0c;base, 基本用不着改&#xff0c;所以没加中文名称。 函数声明宏名英文库名中文库…

51单片机-AT24C02(I2C总线)

目录 一&#xff0c;介绍及元件工作原理 7.时序结构&#xff08;重要&#xff09; 8.i2C总线数据帧&#xff08;重要&#xff09; 二&#xff0c;应用 一&#xff0c;介绍及元件工作原理 1.元件介绍 2.存储器 3.地址总线和数据总线 地址总线只能一次选中一行 4.引脚及应用…

一起学数据分析_2

写在前面&#xff1a;代码运行环境为jupyter&#xff0c;如果结果显示不出来的地方就加一个print()函数。 一、数据基本处理 缺失值处理&#xff1a; import numpy as np import pandas as pd#加载数据train.csv df pd.read_csv(train_chinese.csv) df.head()# 查看数据基本…

05.BOM对象

一、js组成 JavaScript的组成 ECMAScript: 规定了js基础语法核心知识。比如&#xff1a;变量、分支语句、循环语句、对象等等 Web APIs : DOM 文档对象模型&#xff0c; 定义了一套操作HTML文档的APIBOM 浏览器对象模型&#xff0c;定义了一套操作浏览器窗口的API 二、windo…