全球变暖

  • 1.题目
  • 2.基本思想
  • 3.代码实现

1.题目

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

.......
.##....
.##....
....##.
..####.
...###.
.......

其中”上下左右”四个方向上连在一起的一片陆地组成一座岛屿,例如上图就有 2座岛屿。

由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。

具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。

例如上图中的海域未来会变成如下样子:

.......
.......
.......
.......
....#..
.......
.......

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

输入格式
第一行包含一个整数N。

以下 N 行 N列,包含一个由字符”#”和”.”构成的 N×N 字符矩阵,代表一张海域照片,”#”表示陆地,”.”表示海洋。

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

输出格式
一个整数表示答案。

数据范围
1 ≤ N ≤ 1000 1≤N≤1000 1≤N≤1000

输入样例1:

7
.......
.##....
.##....
....##.
..####.
...###.
.......

输出样例1:

1

输入样例2:

9
.........
.##.##...
.#####...
.##.##...
.........
.##.#....
.#.###...
.#..#....
.........

输出样例2:

1

2.基本思想

BFS

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

3.代码实现

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class  Main { // flood fillstatic Scanner sc = new Scanner(System.in);static int N = 1010;static char g[][] = new char[N][N];static int[] dx = {0, 0, 1, -1}, dy = {1, -1, 0, 0};//四个方向的偏移量static boolean st[][] = new boolean[N][N];static int n = 0;static class PII {//保存坐标int x, y;public PII(int x, int y) {this.x = x;this.y = y;}}public static void main(String[] args) {n = sc.nextInt();for (int i = 0; i < n; i++) {//处理输入char[] c = sc.next().toCharArray();for (int j = 0; j < n; j++) {g[i][j] = c[j];}}int cnt = 0;//统计结果for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if (!st[i][j] && g[i][j] == '#') {//当前位置没访问过  且 以该陆地进行 宽搜if (bfs(i, j)) cnt++;}}}System.out.println(cnt);}private static boolean bfs(int x, int y) {int total = 0, bound = 0;//当前位置连通陆地的数量    被淹没陆地的数量Queue<PII> queue = new LinkedList<>();        //初始化 队列queue.offer(new PII(x, y));//加入队列st[x][y] = true;//当前点 标记访问过while (!queue.isEmpty()) {//队列非空PII t = queue.poll();//取出头节点 并删除total++;boolean is_bound = false;//判断 岛屿 是否被淹没for (int i = 0; i < 4; i++) {int a = t.x + dx[i], b = t.y + dy[i];//拓展四个方向的点if (a < 0 && a >= n && b < 0 && b >= n) continue;//超出边界if (st[a][b]) continue;//已访问过if (g[a][b] == '.') {is_bound = true;continue;}queue.add(new PII(a, b));st[a][b] = true;}if (is_bound) bound++;//拓展四个方向后 发现有与 海相连}return total == bound;}
}

Acwing---1233. 全球变暖相关推荐

  1. AcWing 1233. 全球变暖【FloodFill】【BFS】【DFS】

    AcWing 1233. 全球变暖 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 解法一(BFS): 解法二(DFS): 四.其它题解 一.题目链接 AcWing 1233 ...

  2. 蓝桥杯C++ AB组辅导课 第六讲 双指针、BFS与图论 Acwing

    例题 AcWing 1238. 日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有 N 行. 其中每一行的格式是: ts id 表示在 ts 时刻编号 id ...

  3. 【蓝桥杯算法练习题】双指针、BFS与图论

    一.AcWing 1238. 日志统计 [题目描述] 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有NNN行. 其中每一行的格式是: ts id 表示在tstst ...

  4. 第六讲 双指针、BFS与图论、单链表

    双指针 所有类似这样的算法都是双指针算法,时间复杂度为O(n) AcWing 1238. 日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有 N 行. 其中 ...

  5. 蓝桥杯备赛(五) 双指针,BFS与图论

    蓝桥杯备赛(五) 双指针,BFS与图论 一.双指针 1.Acwing 1238. 日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有 N 行. 其中每一行的 ...

  6. 第六章:双指针,BFS,和图论 【完结】

    目录 1238. 日志统计 [双指针] 1101. 献给阿尔吉侬的花束 [BFS] 1113. 红与黑 [BFS] 1224. 交换瓶子 [思维 / 环] 1240. 完全二叉树的权值 [规律] 10 ...

  7. [AcWing算法刷题]之DFS+BFS迷宫模板(简单)

    题目来源: 题库 - AcWing 目录 DFS和BFS模板题目:迷宫类 机器人的运动范围​ 字母 迷宫 红与黑 棋盘问题 马走日 全球变暖 DFS综合类 乘积最大(提高课) 单词接龙(提高课) 取石 ...

  8. AcWing 734. 能量石 (01背包)+(贪心 - 领项交换)

    AcWing 734. 能量石 #include<cstdio> #include<algorithm> #include<cstring> #include< ...

  9. 解题报告:AcWing 352. 闇の連鎖(树上差分、方案统计)

    https://www.acwing.com/problem/content/354/ 在没有附加边的情况下,我们发现这是一颗树,那么再添加条附加边(x,y)后,会造成(x,y)之间产生一个环 如果我 ...

  10. HDU 1233 还是畅通工程。

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1233 x 解题思路: 简单的最小生成树 实现代码: #include <iostream> ...

最新文章

  1. WINDOWS SERVER 2003从入门到精通之DHCP中继代理
  2. c mysql 编码_mysql编码转换 mysql编码设置详解
  3. mysql 学习笔记15 子查询
  4. 【Python 必会技巧】[i for i in range(1,10)] — 列表解析式,列表中使用 for 循环
  5. java stream 多个filter_如何在Java Stream上应用多个过滤器?
  6. 第3篇:Flowable-IDM详述
  7. mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...
  8. NPOI Excel 单元格背景颜色对照表
  9. Python OpenCV学习笔记之:使用MOG2视频背景消除
  10. Atitit mysql数据库自定义异常在java里面的捕获与处理推荐标准与规范
  11. MySQL驱动包下载
  12. vlfeat matlab怎么用,VLFeat在matlab中的使用
  13. 原生HTML table样式设置大全
  14. 「Injective衍生品市场创意大赛」角逐“最强王者”,就等你来
  15. 查看360极速浏览器保存的密码
  16. 计算机软件专利安全期刊论文,安全与环境学报
  17. 2.郝斌C语言课程大纲
  18. 备受欢迎的随心金融P2P
  19. 计算机网络中 数据交换的方式有,计算机网络中的通信数据交换技术探讨
  20. UVM field automation机制

热门文章

  1. 甲基四嗪-活化的pegyreagent,它与含tco的化合物发生反应Methyltetrazine-mPEG, 30 kDa
  2. 中职计算机应用基础pdf,职高三计算机应用基础(win7+office2010)word.pdf
  3. MATLAB简易网络爬虫(未加入DFS)
  4. LCIA(低成本智能自动化)
  5. 嘉泰智能受邀出席2020广东省制造业高质量发展论坛暨制造强省建设院士专家咨询会
  6. 计算机二级题库python题库有几套_2019计算机二级备考资料+题库(含Python)
  7. 【VS开发】Windows上的音频采集技术
  8. ceph的架构和概念学习
  9. 怎么批量下载pexels网站图片?如何解决该网站的反爬?有人说用pexels 的api接口就可以解决。
  10. 大咖访谈 | 做开源,最核心的就是要随缘 —— Apache SkyWalking 创始人吴晟