当前位置: 首页 > news >正文

蓝桥杯刷题 深度优先搜索-[178]全球变暖(C++)

题目描述

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


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

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

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

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

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





…#…


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

输入格式

第一行包含一个整数N(1≤N≤1000)。

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

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

输出格式

一个整数表示答案。

输入输出样例

输入样例1

7
…
.##…
.##…
…##.
…####.
…###.
…

输出样例1

1

输入样例2

9
…
.##.##…
.#####…
.##.##…
…
.##.#…
.#.###…
.#…#…
…

输出样例2

1

知识点:深度优先搜索、剪枝

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1005;
char a[N][N];
ll cnt,ans1,ans2;
int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0};//方向分别为“上、下、左、右”
bool flag=false;
bool check_land(int x,int y,int n)
{if(a[x+1][y]=='.'||a[x-1][y]=='.'||a[x][y+1]=='.'||a[x][y-1]=='.'){return false;}return true;
}
void dfs(int x,int y,int n)//x为行,y为列
{if(a[x][y]=='.'||a[x][y]=='o'){return;}a[x][y]='o';//遍历过的陆地用o表示 if(check_land(x,y,n))//周围全是陆地或墙{flag=true;}for(int i=0;i<4;i++){int nx=x+dx[i],ny=y+dy[i];dfs(nx,ny,n);}cnt++;
}
int main()
{int n;cin>>n;for(int i=0;i<n;i++){cin>>a[i];}for(int i=1;i<n-1;i++){for(int j=1;j<n-1;j++){if(a[i][j]=='#'){dfs(i,j,n);if(cnt!=0){ans1++;//ans1表示非连通块个数 }cnt=0;if(flag==true){ans2++;//ans2表示幸存岛屿个数 }flag=false;}}}cout<<ans1-ans2<<endl;return 0;
}

这题因为说明了周围边缘都是海域,所以不用考虑边缘情况。搜索完可以适当剪枝一下。

http://www.lryc.cn/news/334880.html

相关文章:

  • C语言-函数指针-快速排序算法(书籍示例-入门)
  • # 计算机视觉入门
  • React - 你知道useffect函数内如何模拟生命周期吗
  • 电子元器件批发商的市场营销策略与推广技巧
  • 大型语言模型(LLMs)面试常见问题解析
  • 【接口】HTTP(2) |请求方法及状态码
  • CSS设置网页颜色
  • R语言数据操纵:常用函数
  • 图论做题笔记:bfs
  • 群集服务器与主机托管区别
  • Linux锁的使用
  • go语言学习--2.函数
  • [安卓逆向]常见调试和反调试及解决方案
  • uni-app(H5)论坛 | 社区 表情选择 UI组件
  • 基于SpringBoot+vue的在线商城系统+论文+免费远程调试
  • mac中创建的证书提示是无效或者是证书不受信任的解决办法
  • LangChain Demo | 如何调用stackoverflow并结合ReAct回答代码相关问题
  • 老子云、AMRT3D、眸瑞科技
  • 2023.4.7 机器学习周报
  • 如何将平板或手机作为电脑的外接显示器?
  • Tuxera NTFS for Mac2023绿色免费版 免费的ntfs for mac 免费读写硬盘U盘工具
  • 使用阿里云试用Elasticsearch学习:3.6 处理人类语言——同义词
  • 018——红外遥控模块驱动开发(基于HS0038和I.MX6uLL)
  • 【学习心得】Python中的queue模块使用
  • ubuntu-server部署hive-part4-部署hive
  • 贪心算法|135.分发糖果
  • c# wpf template itemtemplate+ListBox
  • 关于JVM-三色标记算法剖析
  • 怎么看有没有装python
  • VS CODE环境安装和hello world