【蓝桥杯每日一题】4.2 全球变暖

news/2024/7/20 20:12:33 标签: 蓝桥杯, 深度优先, 图论, 算法, c语言, c++

原题链接:1233. 全球变暖 - AcWing题库

由题意可知:

  • 需要找到淹没的岛屿的数量
  • 淹没的岛屿所具备的条件:咩有“高地”,也就是说岛屿(连通块)中的所有元素的 4 4 4-邻域中均含有’ . ’

思路1:

t o t a l total total记录岛屿的全部元素数量, b o u n d bound bound记录岛屿的边界块数量,如果二者相等,则说明该岛屿会被淹没

dfs代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1010;

char a[N][N];
bool vis[N][N];
int n;
int res;
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0}; //移动方向
bool flag=false; //插眼,看是否满足周围四个全是#

void dfs(int x,int y,int& total,int& bound) //total为联通块个数,bound为边界块个数
{
    vis[x][y]=1; //记录已经遍历过
    total++;
    bool is_bound=false;

    for(int i=0;i<4;i++)
    {
        int nx=x+dx[i];
        int ny=y+dy[i];
        //边界值的判断
        if(nx<0||ny<0||nx>=n||ny>n) continue;
        if(vis[nx][ny]) continue;

        if(a[nx][ny]=='.') {is_bound=true;continue;}
        dfs(nx,ny,total,bound);
    }
    if(is_bound) bound++;
    return;
}

int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++) cin>>a[i]; //cin处理字符串更为方便

    //遍历
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(a[i][j]=='#'&&!vis[i][j])
            {
                int total=0,bound=0;
                dfs(i,j,total,bound);
                if(total==bound) res++; //岛屿的块数全部为边界,则沉没
            }
        }
    }

    printf("%d",res);
    return 0;
}

思路2:

  • 直接搜索没有“高地”的连通块,用 f l a g flag flag值标记一下是否带有“高地”

bfs代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1010;

int n;
char a[N][N]; 
int vis[N][N]={0};  
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0}; //移动方向

int main()
{
    scanf("%d",&n);
    for(int i = 1; i <= n; i++) cin>>a[i]; //cin处理字符串更加方便
        
            
    int res = 0;
    
    //进行BFS
    for(int i = 1; i <= n; i++) 
	{
        for(int j = 1; j <= n; j++) 
		{
            if(a[i][j]=='#' && vis[i][j]==0) 
			{
                queue<pair<int, int>> q;
                q.push({i, j});
                vis[i][j] = 1;
                bool flag = true;

                while(!q.empty()) {
                    int x = q.front().first;
                    int y = q.front().second;
                    q.pop();

                    if(a[x][y+1]=='#' && a[x][y-1]=='#' && a[x+1][y]=='#' && a[x-1][y]=='#')
                        flag = false;

                    for(int k = 0; k < 4; k++) {
                        int nx = x + dx[k];
                        int ny = y + dy[k];

                        if(nx >= 1 && nx <= n && ny >= 1 && ny <= n && vis[nx][ny] == 0 && a[nx][ny] == '#') {
                            q.push({nx, ny});
                            vis[nx][ny] = 1;
                        }
                    }
                }

                if(flag)
                    res++; // 统计被淹没的岛的数量
            }
        }
    }

    printf("%d",res);
    return 0;
}

http://www.niftyadmin.cn/n/5467099.html

相关文章

(八)目标跟踪中参数估计(似然、贝叶斯估计)理论知识

目录 前言 一、统计学基础知识 &#xff08;一&#xff09;随机变量 &#xff08;二&#xff09;全概率公式 &#xff08;三&#xff09;高斯分布及其性质 二、似然是什么&#xff1f; &#xff08;一&#xff09;概率和似然 &#xff08;二&#xff09;极大似然估计 …

SQL小技巧之替换、统计表字段存储数据字节大小。

文章目录 概要DATALENGTH函数REPLACE、SUBSTRING函数配合使用小结 概要 最近在工作中要进行数据迁移&#xff0c;对有些大字段需要进行存储大小的统计&#xff0c;因此就总结了这篇文章 DATALENGTH函数 用于返回任何表达式的数据长度&#xff08;以字节为单位&#xff09;。这对…

【Redis 知识储备】应⽤数据分离架构 -- 分布系统的演进(2)

应⽤数据分离架构 随着系统的上线&#xff0c;我们不出意外地获得了成功。市场上出现了⼀批忠实于我们的⽤⼾&#xff0c;使得系统的访问量逐步上升&#xff0c;逐渐逼近了硬件资源的极限&#xff0c;同时团队也在此期间积累了对业务流程的⼀批经验。⾯对当前的性能压⼒&#x…

【Algorithms 4】算法(第4版)学习笔记 23 - 5.4 正则表达式

文章目录 前言参考目录学习笔记1&#xff1a;正则表达式1.1&#xff1a;表示1.2&#xff1a;快捷表示2&#xff1a;正则表达式与非确定有限状态自动机 REs and NFAs2.1&#xff1a;二元性2.2&#xff1a;模式匹配实现2.3&#xff1a;非确定有限状态自动机 Nondeterministic fin…

机器学习——降维算法-奇异值分解(SVD)

机器学习——降维算法-奇异值分解&#xff08;SVD&#xff09; 在机器学习中&#xff0c;降维是一种常见的数据预处理技术&#xff0c;用于减少数据集中特征的数量&#xff0c;同时保留数据集的主要信息。奇异值分解&#xff08;Singular Value Decomposition&#xff0c;简称…

c++的学习之路:9、STL简介与string(1)

一、STL 1、什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 也就是说STL就是一个模板&#xff0c;这个模板就是整合了很多库让我们方…

NMS 系列:soft,softer,weighted,iou-guided, Diou, Adaptive

系列文章目录 IOU 系列&#xff1a;IOU,GIOU,DIOU,CIOU 文章目录 系列文章目录一、NMS简介&#xff08;一&#xff09;为什么要使用NMS&#xff08;二&#xff09;NMS的算法流程&#xff08;三&#xff09;NMS的置信度重置函数&#xff08;四&#xff09;NMS的局限性&#xff…

【SQL Server】1. 认识+使用

1. 创建数据库的默认存储路径 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft SQL Server 2008 R2 当我们选择删除数据库时&#xff0c;对应路径下的文件也就删除了 2. 导入导出数据工具的路径 3. 注册数据库遇到的问题 ??? 目前的问题就是服务器新建…