蓝桥杯 全球变暖(dfs)
标题:全球变暖
【题目描述】
你有一张某海域NxN像素的照片,"."表示海洋、"#"表示陆地,如下所示:
其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。
例如上图中的海域未来会变成如下样子:
请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。
【输入格式】
第一行包含一个整数N。 (1 <= N <= 1000)
以下N行N列代表一张海域照片。
照片保证第1行、第1列、第N行、第N列的像素都是海洋。
【输出格式】
一个整数表示答案。
【样例输入】
7
【样例输出】
1
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
注意:
main函数需要返回0;
只使用ANSI C/ANSI C++ 标准;
不要调用依赖于编译环境或操作系统的特殊函数。
所有依赖的函数必须明确地在源文件中 #include <xxx>
不能通过工程设置而省略常用头文件。
提交程序时,注意选择所期望的语言类型和编译器类型。
思路: 使用dfs分别计算出原始岛屿数和后来剩余的岛屿数即可。
#include<iostream>
#include<string>
#include<queue>
#include<set>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stdio.h> using namespace std; char mp[][];
int grid[][]; // 用于涂色判断
int flag[][]; // mp[i][j]四周都不与海相邻,则flag[i][j] = 1 int N;
int dx[] = { ,-,, };
int dy[] = { ,,,- }; int color; // 第一块岛屿范围内涂1,第二块岛屿范围内涂2,以此类推 void dfs(int x, int y)
{
if (x < || x >= N || y < || y >= N)
return; for (int i = ; i < ; ++i)
{
int xx = x + dx[i];
int yy = y + dy[i]; if (mp[xx][yy] == '#' && grid[xx][yy] == )
{
grid[xx][yy] = color;
dfs(xx, yy);
}
} } bool isNotAdjacent(int x, int y) // 该块陆地四周都不与海相邻,返回true
{
for (int i = ; i < ; ++i)
{
int xx = x + dx[i];
int yy = y + dy[i]; if (x >= && x < N && y >= && y < N && mp[xx][yy] == '.')
return false;
} return true; } int main()
{
cin >> N;
for (int i = ; i < N; ++i)
for (int j = ; j < N; ++j)
{
cin >> mp[i][j];
} memset(grid, , sizeof(grid));
color = ;
// 使用dfs计算原始岛屿数
for (int i = ; i < N; ++i)
for (int j = ; j < N; ++j)
{
if (mp[i][j] == '#' && grid[i][j] == ) // grid[i][j]等于0说明mp[i][j]还未被涂过色
{
dfs(i, j);
color++;
}
} int start_num = color - ; memset(flag, , sizeof(flag));
for (int i = ; i < N; ++i)
for (int j = ; j < N; ++j)
{
if (isNotAdjacent(i, j))
{
flag[i][j] = ;
}
} for (int i = ; i < N; ++i)
for (int j = ; j < N; ++j)
{
if (flag[i][j] != ) // 将所有被淹没的陆地置为 '.'
{
mp[i][j] = '.';
}
} memset(grid, , sizeof(grid));
color = ;
// 再次使用dfs计算后来剩下的岛屿数
for (int i = ; i < N; ++i)
for (int j = ; j < N; ++j)
{
if (mp[i][j] == '#' && grid[i][j] == )
{
dfs(i, j);
color++;
}
} int end_num = color - ; cout << start_num - end_num << endl; return ;
}
蓝桥杯 全球变暖(dfs)的更多相关文章
- 蓝桥杯 带分数 DFS应用
问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次( ...
- Java实现第九届蓝桥杯全球变暖
全球变暖 题目描述 你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: ....... .##.... .##.... ....##. ...
- 2018蓝桥杯 全球变暖(dfs)
你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示:........##.....##........##...####....###.. ...
- POJ 2676 - Sudoku - [蓝桥杯 数独][DFS]
题目链接:http://poj.org/problem?id=2676 Time Limit: 2000MS Memory Limit: 65536K Description Sudoku is a ...
- 蓝桥杯PREV-12(dfs&割点)
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T35 题意:中文题诶- 思路:dfs 假设star 和 end之间总路径数目为ans, 那么若经过路径上某点到 ...
- 蓝桥杯---数独(模拟 || dfs)
[编程题](满分33分) "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数 学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6 ...
- 蓝桥杯---剪格子(DFS&BFS)(小总结)
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...
- 蓝桥杯之大臣的旅费(两次dfs)
Description 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个 ...
- 蓝桥杯之剪格子(经典dfs)
如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+--+-- ...
随机推荐
- HBase轻松入门之HBase架构图解析
2018-12-13 2018-12-20 本篇文章旨在针对初学者以我本人现阶段所掌握的知识就HBase的架构图中各模块作一个概念科普.不对文章内容的“绝对.完全正确性”负责. 1.开胃小菜 关于HB ...
- css 溢出overflow
css 溢出overflow 当一个元素被设置为固定大小,在这个元素中的内容如果超出元素的界限,就会出现溢出的现象. 通常情况下我们可以通过overflow来控制这个属性. overflow语法定义 ...
- secureCRT自动断开的解决方法
转: secureCRT自动断开的解决方法 secureCRT自动断开的解决方法 在secureCRT上登录时,一段时间不用的话会自动断开,必须重新连接,有点麻烦. 有时候服务器端的 /etc/pro ...
- gcc __thread关键字
https://blog.csdn.net/xj178926426/article/details/54345449 EventLoop.cpp __thread EventLoop* t_loopI ...
- python实现简单的百度云自动下载
最近女同让我帮助从百度云下载200个文件,给了我连接和提取码,这种重复的工作不适合人做写了一个简单的爬虫 #coding=utf-8 ''' 自动填写提取码下载百度云资源 方法: for 读取文件中的 ...
- 腾讯云服务器tomcat端口无法访问
第一种情况: 如题:https://console.cloud.tencent.com/cvm/securitygroup 需要去这个地址设置安全组. 说实话,一句mmp不知当讲不当讲.使用说明这块太 ...
- [物理学与PDEs]第1章习题4 偶极子的极限电势
对在 $P_0$ 及 $P_1$ 处分别置放 $-q$ 及 $+q$ 的点电荷所形成的电偶极子, 其偶极距 ${\bf m}=q{\bf l}$, ${\bf l}=\vec{P_0P_1}$. 试证 ...
- djang增删改查
创建表: from django.db import models class Publisher(models.Model): pid = models.AutoField(primary_key ...
- C#处理非托管资源
using System; //处理非托管资源 //例如:文件句柄.网络连接.数据库连接 //实现IDisposable不意味着也应该实现一个终结器,终结器会带来额外开销 //发布本机资源,要释放本机 ...
- SQL Server - AS
AS 是给现有的字段名/表名指定一个别名的意思.