蓝桥杯每日一题2023.10.31

题目描述

全球变暖 - 蓝桥云课 (lanqiao.cn)

题目分析

果然有关连通块类的问题使用dfs都较为好写~~

我们可以通过判断连通块的代码来加上部分条件算出被完全淹没的岛屿个数

在岛屿中如果有为"#"的a[i][j]上下左右全部是"#"则说明此岛屿一定不会被完全淹没,但如果此连通块全部被遍历后发现没有这种情况则这个岛屿一定会被完全淹没,这时我们才看做它是真正我们要求的连通块,我们将其算入答案

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
const int N = 2e3 + 10;
int n, cnt, ans;
char a[N][N];
bool st[N][N];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
void dfs(int x, int y)
{
	st[x][y] = 1;
	int o = 0;
	for(int i = 0; i < 4; i ++)
	{
		int aa = x + dx[i];
		int bb = y + dy[i];
		if(a[aa][bb] == '#')o ++;
	}
	if(o == 4)cnt ++;
	for(int i = 0; i < 4; i ++)
	{
		int aa = x + dx[i];
		int bb = y + dy[i];
		if(a[aa][bb] == '#' && !st[aa][bb])dfs(aa, bb);
	}
}

int main()
{
	cin >> n;
	for(int i = 1; i <= n; i ++)
	{
		for(int j = 1; j <= n; j ++)
		{
			cin >> a[i][j];
		}
	}
	for(int i = 1; i <= n; i ++)
	{
		for(int j = 1; j <= n; j ++)
		{
			if(!st[i][j] && a[i][j] == '#')
			{
				cnt = 0;
				dfs(i, j);
				if(cnt == 0)ans ++;
			}	
		}
	}
	cout << ans;
	return 0;
}
相关推荐
studyForMokey44 分钟前
【Android面试】Gradle专题
android·面试·职场和发展
编程一生3 小时前
面试问到的那些技术细节
面试·职场和发展
软件测试慧姐4 小时前
面试中常问的软件测试面试题
面试·职场和发展
蒸汽求职4 小时前
【蒸汽教育求职干货】OPT只剩3个月还没找到工作,怎么办?——留学生IT求职的“紧急预案”
人工智能·经验分享·面试·职场和发展·美国求职
蒸汽求职5 小时前
【蒸汽教育求职分享】美国IT面试的Behavioral Question:STAR法则人人都知道,但90%的人用错了
人工智能·面试·职场和发展·github·求职招聘·留学生求职
中小企业实战军师刘孙亮5 小时前
什么是增长陷阱?中小企业“增长陷阱”破局指南-佛山鼎策创局破局增长咨询
职场和发展·新媒体运营·创业创新·需求分析·内容运营
_深海凉_5 小时前
LeetCode热题100-两数之和
算法·leetcode·职场和发展
酉鬼女又兒7 小时前
零基础入门前端 第十三届蓝桥杯省赛 :水果拼盘 Flex一篇过(可用于备赛蓝桥杯Web应用开发)
前端·css·职场和发展·蓝桥杯·css3
zhaoshuzhaoshu7 小时前
微内核架构与事件驱动架构的区别与联系详细对比
职场和发展·架构
枳实-叶21 小时前
50 道嵌入式音视频面试题
面试·职场和发展·音视频