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

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

【输入格式】
第一行包含一个整数N。  (1 <= N <= 1000)

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

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

【输出格式】

一个整数表示答案

比较害怕这种问题,所以没敢写。

困惑点:

1 如何判断有几个岛屿?想用dfs判断,做多遍dfs。这个思路是对的,其实我们用两个for循环搜索第一个未被访问过的#, 做dfs就好。

2 怎么把每个岛屿记录下来?之后判断岛屿是否会被全部淹没。但是其实这个过程我们可以在找岛屿的过程中就进行判断,判断在该岛屿中是否存在一个点#,它的四周都是#

#include<iostream>
#include<cstdio>
using namespace std;
int mp[][];
int ans[];
bool vis[][];
void dfs(int x,int y,int k)
{
if(mp[x][y]=='.')
return;
if(vis[x][y])
return;
vis[x][y]=;
if(mp[x-][y]=='#'&&mp[x+][y]=='#'&&mp[x][y-]=='#'&&mp[x][y+]=='#')
ans[k]++;
dfs(x+,y,k);
dfs(x-,y,k);
dfs(x,y-,k);
dfs(x,y+,k);
}
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
getchar();
for(int j=;j<=n;j++)
scanf("%c",&mp[i][j]); }
int len=;
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(mp[i][j]=='#'&&!vis[i][j])
{
dfs(i,j,len);
len++;
}
}
}
int sum=;
for(int i=;i<len;i++)
if(ans[i]==)
sum++;
printf("%d\n",sum);
}

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

  1. 蓝桥杯 全球变暖(dfs)

    标题:全球变暖 [题目描述]你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: 其中"上下左右"四个方向上连在一起的 ...

  2. Java实现第九届蓝桥杯全球变暖

    全球变暖 题目描述 你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: ....... .##.... .##.... ....##. ...

  3. bitset,2018蓝桥杯-明码(二进制转换)

    bitset可以存储二进制数位 bitset<8> x(2); cout<<x<<endl; //输出:00000010 #include <iostream ...

  4. 蓝桥杯 带分数 DFS应用

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

  5. [算法竞赛][2018][蓝桥杯][LanqiaoCA]第九届蓝桥杯A组

    题目1 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + .... 每项是前一项的一半,如果一共有20项,求这个和是多少,结果用分数表示出来.类似:3/2当然,这只是加了前2项 ...

  6. 2018 蓝桥杯省赛 B 组模拟赛(五)

    A模拟 代码1 #include<bits/stdc++.h> using namespace std; int n = 101; int a[120][120]; int ans = 0 ...

  7. 计蒜客2018 蓝桥杯省赛 B 组模拟赛(一)

    1,结果填空:年龄 今天蒜头君带着花椰妹和朋友们一起聚会,当朋友们问起年龄的时候,蒜头君打了一个哑谜(毕竟年龄是女孩子的隐私)说:“我的年龄是花椰妹年龄个位数和十位数之和的二倍”. 花椰妹看大家一脸懵 ...

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

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

  9. 蓝桥杯PREV-12(dfs&割点)

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

随机推荐

  1. HTML5 Canvas 小例子 简易画板

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. poi excel超出65536行数限制自动扩展Invalid row number (65536) outside allow

    1.xls一个sheet只能装65536行,多余则报错 poi包导出或写入excel超出65536报错: java.lang.IllegalArgumentException: Invalid row ...

  3. githup创建新java项目

    1.在githup中创建仓库 2.import创建的地址到本地文件d:/mygit 3.在d:/mygit中创建eclipse项目 3.在eclipse中team-->push to branc ...

  4. OV7670配置和调试小结

    先上一下OV7670的框架图 OV7670常用寄存器设置说明 直接看OV7670 Implementation Guide (V1.0)等 资料我已经上传了 https://files.cnblogs ...

  5. alias 设置别名

    我们在使用Linux中使用较长的命令而且要经常要使用时,总是会使用别名,这里就简单的介绍一下别名alias 指令:alias设置指令的别名 语法:#  alias name='command line ...

  6. HTML页面禁用Enter键自动提交表单

    今天在开发页面时,遇到一个小BUG,,如下图 在页面的文本框获取焦点之后,再按键盘上的Enter键,页面form就会自动提交.如下是页面禁止Enter自动提交代码: document.onkeydow ...

  7. python import package at different path

    1.导入上一级目录的package import sys sys.path.append('..') import <package> # import package at ../ 2. ...

  8. 跨域(三)——JSONP

    一.什么是JSONP? 百度百科:JSONP(JSON with Padding)是JSON的 一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题.由于同源策略,一般来说位于 server1. ...

  9. AWK 知识库

    awk 极客课程 <AWK 编程语言>1 <AWK 编程语言>2 <AWK程序设计语言>https://github.com/wuzhouhui/awk http: ...

  10. 两台openwrt 间的免登陆ssh

    参考文档: http://www.360doc.com/content/13/1013/21/3884271_321222563.shtml http://blog.csdn.net/u0110079 ...