洛谷 P8662 [蓝桥杯 2018 省 AB] 全球变暖

题目描述

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

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

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

由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。

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

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

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

输入格式

第一行包含一个整数 �N。(1≤�≤1000)(1≤N≤1000)。

以下 �N 行 �N 列代表一张海域照片。

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

输出格式

一个整数表示答案。

输入输出样例

输入 #1复制

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

输出 #1复制

1

说明/提示

时限 1 秒, 256M。蓝桥杯 2018 年第九届省赛

分析:

        本题是一道经典的dfs搜索题目,适合新手用来练习(我就是)

        关于本题呢,主要难点有两个,第一个就是如何去判断该大陆是否可以被淹没;第二个是如和去搜索整个地图(dfs)

        第一个问题,如何判断该大陆是否被淹没:

                我们通过观察可以发现,如果该大陆上有一块陆地满足下边的形式:

                                                        #

                                                      ###

                                                        #

               是不是就可以认为这块大陆不会被淹没呢。因为就算海水上升,对于这样的形式肯定会                   留下中间那一块土地,所以在后期dfs搜索的时候我们对这样的形式加一个判断就好了。

        第二个问题,如何搜索(dfs)

                我们可以采用dfs的方法进行搜索,在搜索过程中时刻判断会不会出现上边的形式,我们                  可以借助一个变量num,如果正在搜索的那块陆地的上或下或左或右是陆地,那么                          num++,一旦num==4,那就说明满足了上边的形式,那我们让发现的总陆地数减去1即                  可

我在这用了两个数组arr brr用来上下左右移动搜索,map是地图输入,sign是记录该点有没有来过

ans是发现的新大陆的数量(在搜索的时候如果发现该大陆不会被淹没的话就直接减去1了)

代码:

#include<iostream>
using namespace std;
int n, sum, ans;
int arr[4] = { 0,0,1,-1 };
int brr[4] = { 1,-1,0,0 };
char map[1005][1005];
bool sign[1005][1005];void dfs(int x, int y)
{sign[x][y] = true;//记录一下,到过int num = 0;for (int i = 0; i <= 3; i++)//上下左右{int tx, ty;tx = x + arr[i];ty = y + brr[i];if (map[tx][ty] == '#')//如果下一个点还是陆地,num++num++;if (num == 4)//如果这个时候num==4说明x,y这个点四周都是陆地,那么肯定不会被淹没sum=1;//不被淹没的陆地++;if (sign[tx][ty] == true)//如果下一个地方去过,那么就不去了continue;if (tx<1 || tx>n || ty<1 || ty>n)//如果超出去了,不去了continue;if (map[tx][ty] == '.')//如果是海,不去了continue;dfs(tx, ty);//继续下一个}return;
}int main()
{cin >> n;for (int i = 1; i <= n; i++)//输入地图for (int j = 1; j <= n; j++)cin >> map[i][j];for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){if (map[i][j] == '#' && sign[i][j] == false)//如果是陆地并且没有到过{ans++;//新大陆sum = 0;//记录这块大陆可不可以被淹没,不可以被淹没那么在下边的dfs里边赋值为1dfs(i, j);//开始搜索ans -= sum;//用新大陆总数减去不可以被淹没的大陆数}}}cout << ans << endl;return 0;
}

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

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

相关文章

软件设计原则:依赖倒置

定义 依赖倒置原则&#xff08;Dependency Inversion Principle, DIP&#xff09;是面向对象设计原则之一&#xff0c;其核心是高层模块&#xff08;如业务逻辑&#xff09;不应当依赖于低层模块&#xff08;如具体的数据访问或设备控制实现&#xff09;&#xff0c;而是双方都…

ElasticSearch7.8的下载与安装和Kibana 7.8.0工具使用安装

1、ElasticSearch7.8.0下载 elasticsearch: 官方下载地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch 链接: https://pan.baidu.com/s/1wAKQoB3nhLhcnBlPfVOLxQ 提取码: t83n kibana: 链接: https://pan.baidu.com/s/156aD9zDdvUv8LFgDEIPoSw 提取码:…

PSCAD的使用

1. Canvas Settings中设置母线电压监测和虚拟连线十分重要。 2. Project Settings中snapshot可以实现分段仿真。 3. .out文献导出数据

操作系统—读者-写者问题及Peterson算法实现

文章目录 I.读者-写者问题1.读者-写者问题和分析2.读者—写者问题基本解法3.饥饿现象和解决方案总结 II.Peterson算法实现1.Peterson算法问题与分析(1).如何无锁访问临界区呢&#xff1f;(2).Peterson算法的基本逻辑(3).写对方/自己进程号的区别是&#xff1f; 2.只包含意向的解…

开发Vue组件库

使用脚手架新建vue项目&#xff08;以button 组件为例&#xff09; 1.新建package 文件夹&#xff0c;添加index.js 、custombutton 文件夹&#xff0c;custombutton 中 添加 custombutton .vue index.js <template><div>button</div> </template><…

图神经网络实战(7)——图卷积网络(Graph Convolutional Network, GCN)详解与实现

图神经网络实战&#xff08;7&#xff09;——图卷积网络详解与实现 前言1. 图卷积层2. 比较 GCN 和 GNN2.1 数据集分析2.2 实现 GCN 架构 小结系列链接 前言 图卷积网络 (Graph Convolutional Network, GCN) 架构由 Kipf 和 Welling 于 2017 年提出&#xff0c;其理念是创建一…

基于springboot+vue+Mysql的教学视频点播系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

idea使用docker将Java项目生成镜像并使用

1&#xff1a;开启docker 远程访问 使用 vim 编辑docker服务配置文件 vim /lib/systemd/system/docker.service [Service] Typenotify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not suppor…

软件设计SOLID原则

单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09; 每个类应该只有一个改变的理由&#xff0c;即一个类只负责一个功能领域中的相应职责。 开闭原则&#xff08;Open-Closed Principle, OCP&#xff09; 软件实体&#xff08;类、模块、函数等&#…

pip/conda导出或导入环境

目录 一、pip Option1: pip freeze 导出环境 导入环境 Option2: pipreqs工具 导出环境 导入环境 二、conda Option1: requirements.txt 导出环境 导入环境 Option2: myenv.yml 导出环境 导入环境 Python提供了强大的模块功能&#xff0c;能够方便开发者更加易于…

redis-cli通过DUMP和SADD进行redis set数据类型迁移

1、DUMP指定key导出 redis-cli -h redis1.aliyuncs.com -n 1 -a abc DUMP SOL_addresses Warning: Using a password with -a or -u option on the command line interface may not be safe. "\x02A#,7tC9xSy8FZ9idnDb3e8DaXH6mQYLDWzaDovvQmYESjCQ,DCbNevBcwToUArdEDx3Q7…

思科交换机配置指引(包含安全配置部分)以 Cisco WS-C3850-48T 配置为例

思科Catalyst 3850系列交换机: 型号: Cisco WS-C3850-48T端口数: 48个10/100/1000Mbps数据端口供电方式:AC电源(支持PoE+)堆叠技术:Cisco StackWise-480,提供480Gbps的堆叠吞吐量网络模块:支持多种可选上行链路模块,包括千兆位以太网、万兆位以太网和40千兆位以太网端口…

操作系统内功篇:内存管理之虚拟内存

一 虚拟内存 在这种情况下&#xff0c;要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2000 的位置写入一个新的值&#xff0c;将会擦掉第二个程序存放在相同位置上的所有内容&#xff0c;所以同时运行两个程序是根本行不通的&#xff0c;这两个程序会立刻崩溃。 …

如何在 Ubuntu 12.04 上添加交换空间

本文涵盖的 Ubuntu 版本已不再受支持。如果您目前正在运行 Ubuntu 12.04 服务器&#xff0c;我们强烈建议升级或迁移到受支持的 Ubuntu 版本&#xff1a; 升级到 Ubuntu 14.04从 Ubuntu 14.04 升级到 Ubuntu 16.04将服务器数据迁移到受支持的版本 原因&#xff1a; Ubuntu 12…

亚远景科技-ASPICE评估目的

ASPICE评估是在特定目的的各种案例中进行的。一般来说&#xff0c;过程评估的目的是了解与评估组织单位实施的过程。 具体来说&#xff0c;根据 [ISO/IEC 33001-3.2.6] 中的定义&#xff0c;评估目的是&#xff1a; “一种声明&#xff0c;它作为评估输入信息中的一部分&#…

最简单的 AAC 音频码流解析程序

最简单的 AAC 音频码流解析程序 最简单的 AAC 音频码流解析程序原理源程序运行结果下载链接参考 最简单的 AAC 音频码流解析程序 参考雷霄骅博士的文章&#xff1a;视音频数据处理入门&#xff1a;AAC音频码流解析 本文中的程序是一个AAC码流解析程序。该程序可以从AAC码流中…

企业产品网络安全建设日志0402

文章目录 全面评估了引入短链接组件带来的风险以及替代方案301安全升级正当时 全面评估了引入短链接组件带来的风险以及替代方案 引入比较关键的组件&#xff0c;要全面评估它的安全风险和维护成本。包括它有没有公开的漏洞&#xff0c;它选用的依赖是否有缺陷&#xff0c;它的…

Linux(05) Debian 系统修改主机名

查看主机名 方法1&#xff1a;hostname hostname 方法2&#xff1a;cat etc/hostname cat /etc/hostname 如果在创建Linux系统的时候忘记修改主机名&#xff0c;可以采用以下的方式来修改主机名称。 修改主机名 注意&#xff0c;在linux中下划线“_”可能是无效的字符&…

数据结构(初阶)第一节:数据结构概论

本篇文章是对数据结构概念的纯理论介绍&#xff0c;希望系统了解数据结构概念的友友可以看看&#xff0c;对概念要求不高的友友稍做了解后移步下一节&#xff1a; 数据结构&#xff08;初阶&#xff09;第二节&#xff1a;顺序表-CSDN博客 正文 目录 正文 1.数据结构的相关概…

qqqqqqq

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…