2018第九届蓝桥杯C语言第九题 全球变暖
你有一张某海域NxN像素的照片,"."表示海洋、"#"表示陆地,如下所示:
.......
.##....
.##....
....##.
..####.
...###.
.......
其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。
例如上图中的海域未来会变成如下样子:
.......
.......
.......
.......
....#..
.......
.......
请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。
【输入格式】
第一行包含一个整数N。 (1 <= N <= 1000)
以下N行N列代表一张海域照片。
照片保证第1行、第1列、第N行、第N列的像素都是海洋。
【输出格式】
一个整数表示答案。
【输入样例】
7
.......
.##....
.##....
....##.
..####.
...###.
.......
【输出样例】
1
资源约定:
峰值内存消耗(含虚拟机) < 256M
简单深度优先搜索。不过需要注意的是求的是减少了岛,不是剩余的岛。
代码:
#include <iostream> //只要进行标记就行了。
#include <cstring>
using namespace std;
const int inf=1e3+7;
struct node
{char a;int flag;
}themap[inf][inf];
int now=1,N;
int x1[5]={0,0,1,0,-1};
int y1[5]={0,1,0,-1,0};
int temp[1000007]; bool check(int x,int y)
{for(int i=1;i<=4;i++){if( themap[x+x1[i]][y+y1[i]].a=='#'&&themap[x+x1[i]][y+y1[i]].flag==0 )return false;}return true;
}
bool check1(int x,int y) //这里。
{for(int i=1;i<=4;i++){if(themap[x+x1[i]][y+y1[i]].a=='.')return false;}return true;
}
void dfs(int x,int y)
{if(check(x,y)){return ;}for(int i=1;i<=4;i++){if( themap [ x+x1[i] ] [ y+y1[i] ].a=='#'&&x+x1[i]>=1&&x+x1[i]<=N&&y+y1[i]>=1&&y+y1[i]<=N &&themap[x+x1[i]][y+y1[i]].flag==0 ){themap[x+x1[i]][y+y1[i]].flag=now;dfs(x+x1[i],y+y1[i]);} }
}int main()
{memset( themap,0,sizeof(themap));memset(temp,0,sizeof(temp));cin>>N;getchar();for(int i=1;i<=N;i++) for(int j=1;j<=N;j++){scanf("%c",&themap[i][j].a);if(j==N)getchar(); }for(int i=1;i<=N;i++)for(int j=1;j<=N;j++){if(themap[i][j].flag ==0&&themap[i][j].a=='#'){themap[i][j].flag=now;dfs(i,j);now++;} }//cout<<now<<endl; for(int i=1;i<=N;i++)for(int j=1;j<=N;j++){if(themap[i][j].a=='#'&&check1(i,j) )temp[ themap[i][j].flag ]=1;}int ans=0;for(int i=1;i<=now+2;i++)if(temp[i]==1)ans++;cout<<now-1-ans<<endl;return 0;
}
2018第九届蓝桥杯C语言第九题 全球变暖相关推荐
- 数组三元数c语言程序,递增三元数组——第九届蓝桥杯C语言B组(省赛)第六题...
原创 标题:递增三元组 给定三个整数数组 A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN], 请你统计有多少个三元组(i ...
- c语言中猴子拿香蕉的代码题,猴子分香蕉(2018年第九届蓝桥杯省赛第二题)
```java /** * 标题:猴子分香蕉 5只猴子是好朋友,在海边的椰子树上睡着了.这期间,有商船把一大堆香蕉忘记在沙滩上离去. 第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份 ...
- 2018第九届蓝桥杯省赛真题 C语言B组 第一题
标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 答案:125 可以被四百整除,所以是闰年,二 ...
- 2018年第九届蓝桥杯C语言B组答案第一题:第几天
标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 方法一:直接用笔算,注意2000年为闰年,2 ...
- 明码(蛇皮解法)——第九届蓝桥杯C语言B组(省赛)第二题
先来个注意事项:所用算法基于C++语言(C不支持我也很无奈╮(╯▽╰)╭) 太长不看请直接跳到标题0x03 (:з」∠) 0x00 综述 解法灵感来源于以前写DES算法(一种加密算法)的时候参考的别人 ...
- 【第九届蓝桥杯大赛决赛真题】JAVA大学C组题解
有空就会更新.... 有的题目重复了:再另一篇帖子:https://www.cnblogs.com/dgwblog/p/9090923.html 02 结果填空(满分29分) 标题:海盗与金币 12名 ...
- 整理玩具 第九届蓝桥杯决赛第四题 java实现
标题:整理玩具 小明有一套玩具,一共包含NxM个部件.这些部件摆放在一个包含NxM个小格子的玩具盒中,每个小格子中恰好摆放一个部件. 每一个部件上标记有一个0~9的整数,有可能有多个部件标记相同的整数 ...
- 2018省赛第九届蓝桥杯真题C语言B组第十题题解 乘积最大
2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:乘积最大 给定N个整数A1, A2, ... AN.请你从中选出K个数,使其乘积最大. 请你求出最大的乘积,由于乘积可能超出整型范围,你只 ...
- 2018省赛第九届蓝桥杯真题C语言B组第五题题解 快速排序
2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:快速排序. 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码, ...
最新文章
- JAVA-初步认识-第十一章-异常-概述
- iOS发展- 文件共享(使用iTunes导入文件, 并显示现有文件)
- mysql同步到另一台服务器_mysql两台服务器主从同步
- jdbc连接数据scanip_JDBC连接数据库的四种方式:DriverManager,DataSource,DBCP,C3P0
- LSTM+MDN【混合密度网络】---sketch rnn
- java8 stringbuilder_有了Java8的“+”真的可以不要StringBuilder了吗
- 050、JVM实战总结:动手实验:使用 jstat 摸清线上系统的JVM运行状况
- 怎样快速读完一本网络小说
- Spring aop切面插入事物回滚
- iOS ReactiveCocoa 最全常用API整理
- linux重定向到某目录文件,linux shell中12 21 1file_path重定向语法详解
- mac80211概览
- J2SE基础夯实系列之正则表达式Java
- 播放器的html代码怎么写,制作HTML播放器代码及方法
- 我的毕业设计后端技术栈
- 400. 第 N 位数字【我亦无他唯手熟尔】
- 组合数学 多重集的排列和组合
- SQLite 对时间的支持
- 9、MyBatis的动态SQL
- 2022年河北省高职单招(综合素质)考试冲刺试题及答案