解题思路:
bfs:遍历所有未遍历过的陆地,通过bfs计算出当前位置连通陆地的数量cnt,以及被淹没陆地的数量bound,若cnt == bound表示完整淹没的一个岛屿

dfs:将连通块全部标记,如果这个连通块全部都会淹没,则答案+1,如果这个连通块里面有无法被淹没的,就不+1

bfs代码如下:

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
typedef pair<int, int>PII;
#define x first
#define y second
const int N = 1010;
char g[N][N];
int res = 0;
bool st[N][N];
int n;int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};void bfs(int x, int y, int &cnt, int &bound) {queue<PII>q;q.push({x, y});st[x][y] = true;while (q.size()) {bool is_bound = false;PII t = q.front();cnt++;q.pop();for (int i = 0; i < 4; i++) {int xx = t.x + dx[i], yy = t.y + dy[i];if (xx < 0 || xx >= n || yy < 0 || yy >= n)continue;if (g[xx][yy] == '.') {is_bound = true;continue;}if (st[xx][yy])continue;st[xx][yy] = true;q.push({xx, yy});}if (is_bound) {bound++;}}}int main() {cin >> n;for (int i = 0; i < n; i++)cin >> g[i];for (int i = 0; i < n; i++)for (int j = 0; j < n; j++) {if (g[i][j] == '#' && !st[i][j]) {int bound = 0, cnt = 0;bfs(i, j, cnt, bound);if (cnt == bound)res++;}}cout << res << endl;return 0;
}

dfs代码如下:

#include <iostream>
using namespace std;
const int N = 1010;
char g[N][N];
int ans;bool flag;int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};
bool vis[N][N];void dfs(int x, int y) {if (g[x + 1][y] == '#' && g[x - 1][y] == '#' && g[x][y + 1] == '#' && g[x][y - 1] == '#')flag = true;///上下左右都是陆地,不会淹没for (int i = 0; i < 4; i++) {int xx = x + dx[i], yy = y + dy[i];if (g[xx][yy] == '#'  && !vis[xx][yy]) {vis[xx][yy] = true;dfs(xx, yy);}}
}int main() {int n;cin >> n;for (int i = 1; i <= n; i++)cin >> g[i];for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++) {if (g[i][j] == '#' && !vis[i][j]) {flag = false;dfs(i, j);if (!flag)ans++;}}cout << ans << endl;return 0;
}

[蓝桥杯2018初赛]全球变暖-dfs,bfs,连通块相关推荐

  1. [蓝桥杯2018初赛]全球变暖

    可恶啊,明明是一道普通的bfs,但是第一次用java写还是有一些问题: 1.因为在bfs的时候要判断这个岛最终会不会淹没,所以对于这个岛的每一个点都要判断会不会被淹没,当然前提是要一个bool类型的变 ...

  2. 蓝桥杯2015初赛生命之树 DFS图解

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 蓝桥杯2015初赛生命之树

  3. [蓝桥杯2019初赛]迷宫-DFS、BFS两种方法

    迷宫问题的最短路,加最小字典序 迷宫文件maze.txt传送门 作者写的2019年B组蓝桥杯解集 . . . DFS的版本 #include<iostream> #include<c ...

  4. [蓝桥杯2018初赛]字母阵列-单向dfs

    题目描述 仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:"LANQIAO". SLANQIAO ZOEXCCGB MOAYWKHI BCCIPLJQ SLANQIAO ...

  5. 蓝桥杯2017初赛-迷宫-dfs

    题目描述 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则: L表示走到左边的房间,R表示走到右边 ...

  6. [蓝桥杯2016初赛]卡片换位 bfs+set

    你玩过华容道的游戏吗?这是个类似的,但更简单的游戏.看下面 3 x 2 的格子 +---+---+---+ | A | * | * | +---+---+---+ | B | | * | +---+- ...

  7. [蓝桥杯2016初赛]卡片换位-bfs

    题目描述 你玩过华容道的游戏吗?这是个类似的,但更简单的游戏.看下面 3 x 2 的格子 在其中放5张牌,其中A代表关羽,B代表张飞,* 代表士兵.还有一个格子是空着的. 你可以把一张牌移动到相邻的空 ...

  8. 1367: [蓝桥杯2018初赛]付账问题

    2018省赛A组第10题 付账问题 题目链接http://oj.ecustacm.cn/problem.php?id=1367 思路: 平均是每个人应该付a/n,但由于带的钱不够,所以先让钱少的人先付 ...

  9. [蓝桥杯2018初赛]第几天-日期计算(水题)

    闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的.补上时间差的年份为闰年.闰年共有366天(1月~12月分别为31天.29天.31天.30天.31天. ...

最新文章

  1. [笔记].关于Nios II的数据类型的一点想法
  2. iOS项目的目录结构和开发流程
  3. c++读取txt中每行的数据到数组中
  4. 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
  5. python格式化输出之format用法
  6. 计算机入门模拟试题abcd,计算机一级计算机基础及WPSOffice应用考前模拟试题及答案(7)...
  7. Python小数据池,代码块
  8. 兼容最新PS2021 Raya Pro 5 for Mac——值得推荐的PS终极数字混合扩展面板
  9. java log4j 多线程_针对log4j 1.2.15中的并发锁问题,到底是io瓶颈,还是锁竞争导致线程block?...
  10. Cmder安装使用篇
  11. 软件测试(三)--标准的测试用例模板
  12. Badboy工具:简介,安装,脚本录制
  13. 徽州区数字城管平台智慧管理城市
  14. instead of 触发器的用法
  15. 2019美国大学计算机本科排名,美国大学计算机排名2019最新排名
  16. 大学生职业生涯规划书性格特征_大学生职业生涯规划书自我分析范文
  17. 华三防火墙配置端口地址转换_H3C SecPath 防火墙设置之端口映射(命令)
  18. 纵观 Excel 演化史,开发者如何通过“表格技术”提升企业生产力
  19. 浙大pat 1017
  20. 多元函数牛顿法求函数极小值

热门文章

  1. ArcGIS中数据存放相对路径和绝对路径的区别
  2. Android之ndk-build出现c:28:51: error: ‘get_string‘ undeclared here (not in a function)解决办法
  3. linux c之管道的介绍、创建关闭和简单读写(父进程向子进程写入数据)
  4. linux c之fdopen(int fd, const char *type)使用总结
  5. Android之如何解决Listview里面的值出现了2次
  6. 人工神经网络心得体会_卷积神经网络学习心得
  7. python3文件的编码类型是什么_Python3编码类型有哪些?怎么转换?
  8. 高糊马赛克秒变高清,表情帝:这还是我吗?
  9. 北方人的快乐。。。| 今日最佳
  10. 选了combobox里的选项后没激发change事件_stata 事件分析法