标题:全球变暖

【题目描述】
你有一张某海域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;

 ][];
 ][];    // 用于涂色判断
 ][];    // mp[i][j]四周都不与海相邻,则flag[i][j] = 1

 int N;
 ] = { ,-,, };
 ] = { ,,,- };

 int color;    // 第一块岛屿范围内涂1,第二块岛屿范围内涂2,以此类推

 void dfs(int x, int y)
 {
      || x >= N || y <  || y >= N)
         return;

     ; i < ; ++i)
     {
         int xx = x + dx[i];
         int yy = y + dy[i];

         )
         {
             grid[xx][yy] = color;
             dfs(xx, yy);
         }
     }

 }

 bool isNotAdjacent(int x, int y)    // 该块陆地四周都不与海相邻,返回true
 {
     ; i < ; ++i)
     {
         int xx = x + dx[i];
         int yy = y + dy[i];

          && x < N && y >=  && y < N && mp[xx][yy] == '.')
             return false;
     }

     return true;

 }

 int main()
 {
     cin >> N;
     ; i < N; ++i)
         ; j < N; ++j)
         {
             cin >> mp[i][j];
         }

     memset(grid, , sizeof(grid));
     color = ;
     // 使用dfs计算原始岛屿数
     ; i < N; ++i)
         ; j < N; ++j)
         {
             )    // grid[i][j]等于0说明mp[i][j]还未被涂过色
             {
                 dfs(i, j);
                 color++;
             }
         }

     ;

     memset(flag, , sizeof(flag));
     ; i < N; ++i)
         ; j < N; ++j)
         {
             if (isNotAdjacent(i, j))
             {
                 flag[i][j] = ;
             }
         }

     ; i < N; ++i)
         ; j < N; ++j)
         {
             )    // 将所有被淹没的陆地置为 '.'
             {
                 mp[i][j] = '.';
             }
         }

     memset(grid, , sizeof(grid));
     color = ;
     // 再次使用dfs计算后来剩下的岛屿数
     ; i < N; ++i)
         ; j < N; ++j)
         {
             )
             {
                 dfs(i, j);
                 color++;
             }
         }

     ;

     cout << start_num - end_num << endl;

     ;
 }

蓝桥杯 全球变暖(dfs)的更多相关文章

  1. 蓝桥杯 带分数 DFS应用

    问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次( ...

  2. 2018蓝桥杯 全球变暖(dfs)

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

  3. POJ 2676 - Sudoku - [蓝桥杯 数独][DFS]

    题目链接:http://poj.org/problem?id=2676 Time Limit: 2000MS Memory Limit: 65536K Description Sudoku is a ...

  4. 蓝桥杯PREV-12(dfs&amp;割点)

    题目链接:http://lx.lanqiao.cn/problem.page?gpid=T35 题意:中文题诶- 思路:dfs 假设star 和 end之间总路径数目为ans, 那么若经过路径上某点到 ...

  5. 蓝桥杯---数独(模拟 || dfs)

    [编程题](满分33分) "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数 学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6 ...

  6. 蓝桥杯---剪格子(DFS&amp;BFS)(小总结)

    问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...

  7. 蓝桥杯之大臣的旅费(两次dfs)

    Description 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个 ...

  8. 蓝桥杯之剪格子(经典dfs)

    如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+--+-- ...

  9. 蓝桥杯之 2n皇后问题(双层dfs,暴力)

    Description 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后 和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两 个白皇后都不在同 ...

随机推荐

  1. Linux Pthread 深入解析(转-度娘818)

    Linux Pthread 深入解析   Outline - 1.线程特点 - 2.pthread创建 - 3.pthread终止         - 4.mutex互斥量使用框架         - ...

  2. 解决thinkPHP构造函数__construct导致tp方法冲突问题

    我们在使用了__construct构造函数,覆盖了父类的构造函数,导致父类tp的方法无法使用,例如$this->display(),解决办法是: 在__construct函数中调用一下父类的构造 ...

  3. java7新特新(一) Try-with-resources (TWR)

    Try-with-resources (TWR) 在处理IO的代码中,我们会使用大量的try...catch()...finally...语法,其中会在finally进行IO的close操作,写过py ...

  4. 常用WEB服务器的特点介绍

    经过系统的学习web服务器,现在知道常用的web服务器的优缺点,这对搭建网站架构时选择使用web服务器很有帮助,现在我简单总结一下: 1. Apache:属于重量级web服务器(重量级主要是在软件包的 ...

  5. oc @property参数

  6. linux和windows的文件互传

    Linux →→→Windows 1.使用secureCRT:下载文件只需在shell终端仿真器中输入命令"sz 文件名",即可利用Zmodem将文件下载到本地某目录下. 2. s ...

  7. windows cmd: 打开windows系统程序或服务的常见命令

    Windows常用CMD命令 http://www.cnblogs.com/sbaicl/archive/2013/03/05/2944001.html 其实查找Windows自带程序的命令行很简单, ...

  8. Eclipse 改变字体大小,设置背景色

    Eclipse背景颜色修改: 操作界面默认颜色为白色.对于我们长期使用电脑编程的人来说,白色很刺激我们的眼睛,所以我经常会改变workspace的背景色,使眼睛舒服一些.设置方法如下: 1.打开win ...

  9. 第三天 Java语言基础

    一.三元运算符 三元运算符,也称为三目运算符或问号冒号运算符.即有三个表达式参与的运算表达式.既然是个运算符,那么运算完必须有运算结果. 1)三元运算符的格式 (表达式1)?表达式2:表达式3: 2) ...

  10. hashlib 模块:加密

    import hashlib # 基本使用 cipher = hashlib.md5('需要加密的数据的二进制形式'.encode('utf-8')) print(cipher.hexdigest() ...