全球变暖问题(floodfill 处理联通块问题)

全球变暖问题

文章目录

  • 全球变暖问题
    • 前言
    • 题目描述
    • 题目分析
      • 边界问题的考虑
      • 岛屿是否被淹没判断:
      • 如何寻找联通块:
    • 代码
    • 预告

前言

之前我们介绍了 bfs算法在二维,三维地图中的应用,现在我们接续进行拓展,解锁floodfill 算法,准确的来说是用 bfs算法解决联通块问题。后续还会更新 bfs算法有关内容,喜欢的小伙伴可以点个关注啦。

题目描述

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

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

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

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

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

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

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

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

输入格式
第一行包含一个整数N。

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

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

输出格式
一个整数表示答案。

数据范围
1≤N≤1000
输入样例1:
7

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

输出样例1:
1
输入样例2:

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

输出样例2:
1

题目分析

边界问题的考虑

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

这里想要不考虑边界问题,输入的初始下标要设为 1 开始,这样就可以保证数组不越界,并且由题目的意思可得,外围的圈都是海洋,只要下标从1 开始,我们就可以不用考虑bfs算法当中的边界问题。

岛屿是否被淹没判断:

如何判定这是一个不会被淹没的岛屿呢?
首先我们要明白联通块的概念------连在一起的快;
接着我们定义一个沿岸元素

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

也就是说只要一个‘#’旁边有海洋,我们就可以认定该陆地元素‘#’是沿岸元素块。
只要我们的联通块的所有总数=沿岸元素的所有总数,那么我们就可以判定这是个会被淹没的岛屿

如何寻找联通块:

答案就是利用我们的 bfs算法将目标元素进行宽度优先搜索,将搜索到的的‘#’,标记,继续搜索那些没有被标记的‘#’

代码

详细的解释都在代码的注释里头啦

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N =1e3 + 7;
char g[N][N];//用来存放地图
bool st[N][N];//用来统计那些点已经被搜索过了
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
typedef pair<int,int> PII;
void bfs(int i,int j,int &total,int &bound){
//这里使用的引用符号是&,要将值传回去。st[i][j]=true;queue<PII> q;q.push({i,j});while(!q.empty()){auto t=q.front();q.pop();total++;bool flag=false;//这个flag用于沿岸元素的判断for(int i=0;i<4;i++){int x=t.first+dx[i];int y=t.second+dy[i];if(g[x][y]=='#' && !st[x][y]){q.push({x,y});st[x][y]=true;}if(g[x][y]=='.'){//只要有一个旁边元素是‘.’就可以判断其为沿岸元素flag=true;}}if(flag) bound++;//如果判断成功,沿岸元素++}
}
int main(){int n;cin>>n;memset(g,'.',sizeof g);//在题目分析中的说明里,//这个代码可要可不要,假如没有题目中的话,我们就要加上这行代码了for(int i=1;i<=n;i++) cin>>g[i];int res=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(!st[i][j] && g[i][j]=='#'){int total=0,bound=0;bfs(i,j,total,bound);if(total==bound) res++;//判断这个岛屿是否会被淹没}}}cout<<res<<endl;return 0;
}

预告

后期还放出大学生 web大作业【制作一个门户网站】,感兴趣的小伙伴可以点个关注啦

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

详解Nacos和Eureka的区别

文章目录 Eureka是什么Nacos是什么Nacos的实现原理 Nacos和Eureka的区别CAP理论连接方式服务异常剔除操作实例方式自我保护机制 Eureka是什么 Eureka 是Spring Cloud 微服务框架默认的也是推荐的服务注册中心, 由Netflix公司与2012将其开源出来,Eureka基于REST服务开发,主要用…

crypto:摩丝

题目 根据题目所给的压缩包下载后解压&#xff0c;打开文本提示 摩斯密码&#xff0c;对照表可解码得到flag

【RabbitMQ实战】06 3分钟部署一个RabbitMQ集群

一、集群的安装部署 我们还是利用docker来安装RabbitMQ集群。3分钟安装一个集群&#xff0c;开始。 前提条件&#xff0c;docker安装了docker-compose。如果没安装的话&#xff0c;参考这里 docker-compose文件参考bitnami官网&#xff1a;https://github.com/bitnami/contai…

tsar-性能监控工具

简介 tsar是淘宝自己开发的一个采集工具&#xff0c;主要用来收集服务器的系统信息&#xff08;如cpu&#xff0c;io&#xff0c;mem&#xff0c;tcp等&#xff09;&#xff0c;以及应用数据&#xff08;如squid haproxy nginx等&#xff09;。收集到的数据存储在磁盘上&#…

机器人中的数值优化|【四】L-BFGS理论推导与延伸

机器人中的数值优化|【四】L-BFGS理论推导与延伸 往期内容回顾 机器人中的数值优化|【一】数值优化基础 机器人中的数值优化|【二】最速下降法&#xff0c;可行牛顿法的python实现&#xff0c;以Rosenbrock function为例 机器人中的数值优化|【三】无约束优化&#xff0c;拟牛…

OWASP Top 10漏洞解析(1)- A1:Broken Access Control 访问控制失效

作者&#xff1a; gentle_zhou 原文链接&#xff1a;OWASP Top 10漏洞解析&#xff08;1&#xff09;- A1:Broken Access Control 访问控制失效-云社区-华为云 Web应用程序安全一直是一个重要的话题&#xff0c;它不但关系到网络用户的隐私&#xff0c;财产&#xff0c;而且关…

解决电脑桌面软件图标变白的问题

文章目录 前言一、软件图标变白的原因二、解决方法1、显示隐藏项目2、清除图标缓存 前言 桌面软件太多了&#xff0c;导致有些杂乱&#xff0c;换了个显示器后&#xff0c;想着将桌面的软件分类&#xff0c;将其放到不同的目录下&#xff0c;结果有些软件放入文件夹后图标变成…

手把手教你实现:将后端SpringBoot项目部署到华为云服务器上

前言 前提&#xff1a;有一个后端项目&#xff0c;项目能够运行在本地&#xff0c;可以通过本地访问&#xff08;localhost&#xff09; 如果没有可以看这篇&#xff1a;一个基于SpringBoot的后端项目 注册华为云账号 华为云官网 购买云服务器 产品 -> 华为云耀云服务器…

基于微信小程序的民宿短租酒店预订系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

8款常见的自动化测试开源框架

在如今开源的时代&#xff0c;我们就不要再闭门造车了&#xff0c;热烈的拥抱开源吧&#xff01;本文针对性能测试、Web UI 测试、API 测试、数据库测试、接口测试、单元测试等方面&#xff0c;为大家整理了github或码云上优秀的自动化测试开源项目&#xff0c;希望能给大家带来…

CentOS下安装MySQL 8.1及备份配置

1 卸载原来的MySQL版本 移除之前部署的mysql软链接 # unlink /etc/init.d/mysql # unlink /usr/bin/mysql2 下载最新的MySQL版本 https://dev.mysql.com/downloads/mysql/8.0.html 我这里直接把地址放在这里&#xff1a;https://cdn.mysql.com//Downloads/MySQL-8.1/mysql…

IP地址最终弹,DNS,数据链路层,特殊地址

目录 一、特殊地址 二、数据链路层 三、DNS 一、特殊地址 将IP地址中的主机IP全部设置为0&#xff0c;就成了网络号&#xff0c;代表这个局域网&#xff08;不可给具体的设备分配这个IP&#xff09; 将IP地址中的主机IP全部设置为1&#xff0c;就成了广播地址&#xff0c;给同…

初识网络原理

网络发展史 独立模式 计算机之间相互独立 网络互联模式 将多台计算机连接在一起&#xff0c;完成数据共享。 数据共享本质上是网络数据传输,即计算机之间通过网络来传输数据&#xff0c;也称为网络通信。 根据网络互连的规模不同&#xff0c;可以划分为局域网和广域网。 …

14:00面试,14:06就出来了,这问的谁顶得住啊

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

JDK21新特性 有序集合

有序集合 描述常用有序集合体系LinkedHashMapLinkedHashSetLinkedBlockingDequeArrayDeque 三级目录 描述 Java集合体系中&#xff0c;原来就有有序集合实现&#xff0c;但是没有规范支持有序操作的接口。 JDK21 新增了两个接口 SequencedCollection&#xff0c;SequencedMa…

一文了解亚马逊云科技适用于 Amazon Lightsail 的托管数据库

Amazon Lightsail 是亚马逊云科技提供的一种易上手使用、月度价格经济实惠&#xff0c;并包括了计算实例、容器、存储、数据库的虚拟专用服务器。在创建时可以进行业务蓝图选择&#xff0c;可选择包含多种操作系统&#xff08;Linux/Windows 等&#xff09;或操作系统加上典型应…

JS进阶-函数剩余参数

函数参数的使用细节&#xff0c;能够提升函数应用的灵活度。 动态参数 arguments是函数内部内置的伪数组变量&#xff0c;它包含了调用函数时传入的所有实参&#xff0c;只存在于函数里 function getSum() {let sum 0for (let i 0; i < arguments.length; i) {sum arg…

从0开始写中国象棋-创建棋盘与棋子

从控制台版本开始 考虑到象棋程序&#xff0c;其实就是数据结构与算法实现。 所以和界面相关的QT部分我们先放一放。 我们从控制台版本开始。这样大家更容易接受&#xff0c;也不影响开发。 后面我们会把控制台嫁接到QT上完成完整的游戏&#xff0c;那时候自然就水到渠成了…

软件测试:全链路追踪工具 Zipkin导入、安装(Windows版本)

1.0全链路追踪技术出现的原因 公司内部一个功能的实现&#xff0c;底层可能调用多个应用系统 在调用这个功能的同时&#xff0c;可能会出现多种情况&#xff0c;比如访问较慢&#xff0c;出现错误&#xff0c;可能需要进行定位 所以&#xff0c;我们需要快速定位服务错误点 大…

Spring整合RabbitMQ——消费者

1.配置consumer xml配置文件 2. 实现MessageListener接口 并重写onMessage方法