Acwing 1233. 全球变暖 (每日一题)

文章介绍了使用BFS算法解决关于海域照片中岛屿被全球变暖淹没的问题,通过遍历和计数判断岛屿的命运。

如果你觉得这篇题解对你有用,可以点个赞或关注再走呗,谢谢你的关注~

题目描述

你有一张某海域 N×N

像素的照片,”.”表示海洋、”#”表示陆地,如下所示:


.##…
.##…
…##.
…####.
…###.

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

座岛屿。

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

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

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





…#…

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

第一行包含一个整数N。

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

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

一个整数表示答案。
数据范围

1≤N≤1000

输入样例1:

7

.##…
.##…
…##.
…####.
…###.

输出样例1:

1

分析

其中”上下左右”四个方向上#连在一起的一片陆地组成一座岛屿。
具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋.),它就会被淹没。

题目模拟(岛屿)

在这里插入图片描述

注:图中有3个岛屿,上下连续区域。

题目模拟(海洋淹没)

在这里插入图片描述

注:题中有一个岛屿全被淹没

题目解读

观察一下:岛屿中陆地的数量和海洋的数量是统一的。
如果这个陆地上下左右方向只要有一个方向有.的话,就说明该陆地会被淹没
也就是只要我们在陆地上下左右方向中找到了一个.,就说明这个陆地被淹没
换言之,如果说岛屿中陆地被淹没了,就存在至少一个方向的海洋.
我们只需要统计岛屿的个数和海洋的个数即可。
如果海洋个数和岛屿中陆地的个数相等,则说明该岛屿已被淹没。否则未被淹没

所以,关键在于维护海洋和岛屿中陆地的个数。

这题用BFS来处理
首先没有点与点之间的关系,所以我们不用邻接表来存储边和点的关系。
而是用队列的方式去维护BFS一层一层往外搜,一层一层往外扩。

那在bfs中我们还需要维护其他变量用于解决此题。
首先,我们需要去统计连通块(岛屿)中陆地的个数 res
这里在队头元素出队的时候,统计一下即可。
设定isbound来标记是边界的.
然后,弹出队头,进行上下左右的坐标移动,统计其上下左右方向是否有.
有的话,我们就将该位置的坐标标记上
false

最后统计一下每个岛屿的isbound个数有多少个。

如果说resisbound相等,则说明该岛屿全部淹没

代码

import java.util.*;
public class Main{
   
   
    static int N=1010;
    static char g[][]=new char[N][N];
    static boolean st[][]=new boolean [N][N];
    static int dx[]= {
   
   1,0,-1,0};
    static int dy[]= 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寸 铁

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值