2018蓝桥杯省赛C/C++ B组——全球变暖

原创 2018年04月16日 22:00:08

题目大意

你有一张某海域NxN像素的照片,”.”表示海洋、”#”表示陆地,如下所示:
…….
.##….
.##….
….##.
..####.
…###.
…….
其中”上下左右”四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。
例如上图中的海域未来会变成如下样子:
…….
…….
…….
…….
….#..
…….
…….
请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。

输入格式

第一行包含一个整数N。 (1 <= N <= 1000)
以下N行N列代表一张海域照片。
照片保证第1行、第1列、第N行、第N列的像素都是海洋。

输出格式

一个整数表示答案。

输入样例

7
…….
.##….
.##….
….##.
..####.
…###.
…….

输出样例

1

题解

直接进行dfs就可以,统计岛的总数量,统计不会淹没的岛屿的个数,差值就是我们要求的。

代码

#include<iostream>
using namespace std;
const int N = 1010char a[N][N];
int d[][2] = {0 , 1 , 0 , -1 , 1 , 0 , -1 , 0};
int n;
int ans = 0;
int ans_island = 0;

void dfs(int x , int y){
    if(a[x][y] != '#'){
        return;
    }
    if(x < 1 || x > n || y < 1 || y > n){
        return ;
    }
    if(!flag){
        int cnt = 0;
        for(int i = 0;i < 4;i++){
            int dx = x + d[i][0];
            int dy = y + d[i][1];
            if(dx > 0 && dx <= n && dy > 0 && dy <= n && a[dx][dy] != '.'){
                cnt++;
            }
            if(cnt == 4){
                ans++;
                flag = true;
            }
        }
    }
    a[x][y] = '*';
    for(int i = 0;i < 4;i++){
        int dx = x + d[i][0];
        int dy = y + d[i][1];
        if(dx > 0 && dx <= n && dy > 0 && dy <= n && a[dx][dy] != '.'){
            dfs(dx , dy);
        }
    }
}

int main(){
    cin >> n;
    for(int i = 1;i <= n;i++){
        for(int j = 1;j <= n;j++){
            cin >> a[i][j];
        }
    }
    for(int i = 1; i <= n;i++){
        for(int j = 1;j <= n;j++){
            if(a[i][j] == '#'){
                ans_island++;
                flag = false;
                dsf(i , j);
            }
        }
    }
    cout << ans_island - ans << endl;
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jane_96/article/details/79967383

2018省赛第九届蓝桥杯真题C语言B组第九题题解 全球变暖

2018第九届蓝桥杯C++省赛B组[最新题解汇总]标题:全球变暖你有一张某海域NxN像素的照片,&quot;.&quot;表示海洋、&quot;#&quot;表示陆地,如下所示:........##....
  • nka_kun
  • nka_kun
  • 2018-04-01 20:12:39
  • 397

20180401第九届蓝桥杯省赛B组真题-9全球变暖

标题:全球变暖你有一张某海域NxN像素的照片,&quot;.&quot;表示海洋、&quot;#&quot;表示陆地,如下所示:........##.....##........##...####.....
  • lady_killer9
  • lady_killer9
  • 2018-04-01 16:09:41
  • 188

2018_蓝桥杯省赛C/C++_B组总结

    2018年4月1号,很独特的日子,愚人节+蓝桥杯==发现自己很垃圾??   第一题:第几天    直接打开日历算的。。。。第二题:看字符回答数字   负数转换成二进制忘了,用电脑的计算器去做,...
  • qq_39671636
  • qq_39671636
  • 2018-04-02 00:24:05
  • 106

2018年4月1日蓝桥杯省赛第九届蓝桥杯真题C/C++(B组)

  • 2018年04月02日 14:29
  • 27KB
  • 下载

20180401第九届蓝桥杯省赛B组真题-1第几天

标题:第几天2000年的1月1日,是那一年的第1天。那么,2000年的5月4日,是那一年的第几天?注意:需要提交的是一个整数,不要填写任何多余内容。手算都可以,这里直接粘贴2013年 高斯日记那道题了...
  • lady_killer9
  • lady_killer9
  • 2018-04-01 16:35:40
  • 1575

2018 蓝桥杯 省赛 B组 原题 C语言B组 第3题 第九届蓝桥杯真题 +答案+解析

标题:乘积尾零如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6...
  • feifancaicai
  • feifancaicai
  • 2018-04-01 19:10:13
  • 862

2018年第九届蓝桥杯【C++省赛B组】【题目汇总】

2018年第九届蓝桥杯【C++省赛B组】【题目汇总】 第一题:第几天 第二题:明码 第三题:乘积尾零 第四题:测试次数 第五题:快速排序 第...
  • qq_34202873
  • qq_34202873
  • 2018-04-02 09:36:59
  • 2498

2018年4月1日省赛第九届蓝桥杯真题C/C++(B组)

  • 2018年04月01日 15:48
  • 26KB
  • 下载

2018 蓝桥杯 省赛 B组 原题 C语言B组 第9题 第九届蓝桥杯真题 全球变暖

标题:全球变暖你有一张某海域NxN像素的照片,&quot;.&quot;表示海洋、&quot;#&quot;表示陆地,如下所示:........##.....##........##...####.....
  • feifancaicai
  • feifancaicai
  • 2018-04-01 19:20:49
  • 101

2018第九届蓝桥杯C++省赛B组[最新题解汇总]

第一题:第几天第二题:明码第三题:乘积尾零第四题:测试次数第五题:快速排序第六题:递增三元组第八题:日志统计第九题:全球变暖第十题:乘积最大...
  • nka_kun
  • nka_kun
  • 2018-04-02 15:10:53
  • 161
收藏助手
不良信息举报
您举报文章:2018蓝桥杯省赛C/C++ B组——全球变暖
举报原因:
原因补充:

(最多只允许输入30个字)