首页 > 其他分享 >蓝桥杯-全球变暖

蓝桥杯-全球变暖

时间:2023-01-29 22:44:55浏览次数:47  
标签:map tx ty int ....... 蓝桥 ++ 全球 变暖

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

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

其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。
具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。
例如上图中的海域未来会变成如下样子:

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

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

输入

第一行包含一个整数N。 (1 <= N <= 1000)
以下N行N列代表一张海域照片。
照片保证第1行、第1列、第N行、第N列的像素都是海洋。

输出

一个整数表示答案。

样例输入 Copy

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

这道题可以用dfs深搜来做,先找到每一个岛屿,然后搜索这个岛屿是否存在有无法被淹没的点,如果找到,则该岛屿无法被湮没

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;

const int N = 1000;
char map[N][N];
int n;
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
int cnt = 0;
bool flag = false;
int ans = 0;
int res_ans = 0;
void dfs(int x,int y)
{
    //该点在岛屿上
    if (map[x][y] != '#')
    {
        return ;
    }
    //不越界
    if (x > n || x < 0 || y > n || y < 0)
    {
        return ;
    }
    //判断是否为无法淹没的点
    if (flag == false)
    {
        cnt = 0;
        for(int i = 0;i < 4;i++)
        {
            int tx = x + dx[i];
            int ty = y + dy[i];
            //检验边界条件,该点是否可达
            if (tx < n && tx >= 0 && ty < n && ty >= 0 && map[tx][ty] != '.')
            {
                cnt++;
            }
        }
        if (cnt == 4)
        {
            ans++;
            //如果找到一个无法被淹没的点,就停止搜索该岛屿
            flag = true;
        }
    }
    //防止重复遍历一个点
    map[x][y] = '*';
    //dfs搜索
    for(int i = 0;i < 4;i++)
    {
        int tx = x + dx[i];
        int ty = y + dy[i];
        dfs(tx,ty);
    }

}
int main()
{
    cin >> n;
    for(int i = 0;i < n;i++)
    {
        for(int j = 0;j < n;j++)
        {
            cin >> map[i][j];
        }
    }
    //找到每一个岛屿
    for(int i = 0;i < n;i++)
    {
        for(int j = 0;j < n;j++)
        {
            if (map[i][j] == '#')
            {
                res_ans++;
                flag = false;
                dfs(i,j);
            }
        }
    }
    cout << res_ans - ans << endl;
}

 

 

标签:map,tx,ty,int,.......,蓝桥,++,全球,变暖
From: https://www.cnblogs.com/polang19/p/17074023.html

相关文章

  • 蓝桥杯-跳跃
    题目 小蓝在一个n行m列的方格图中玩一个游戏。 开始时,小蓝站在方格图的左上角,即第1行第1列。 小蓝可以在方格图上走动,走动时,如果当前在第r行第c列,他不......
  • 蓝桥杯备战日志(Python)2-相乘(逆向枚举)
    原题小蓝发现,他将  至  之间的不同的数与  相乘后再求除以  的余数,会得到不同的数。小蓝想知道,能不能在  至  之间找到一个数,与  相乘后再除以  后的余数......
  • 全球最杰出的14位程序员
    近日,ITWorld整理全球最杰出的14位程序员,一起来看下让我们膜拜的这些大神都有哪些?(排名不分先后)1.JonSkeet个人名望:程序技术问答网站StackOverflow总排名第一的大神,每......
  • GitHub2021年度报告:中国开发者数量全球第2,最受欢迎的语言?
    临近年底,各大平台年终报告频频发布。作为程序员,应该关注些什么呢?近日,全球最大开发者社区GitHub重磅发布了《2021年度Octoverse报告》,本报告首次结合了来自GitHub上,超过40......
  • 蓝桥杯 易错题 赢球票
    题目描述某机构举办球票大奖赛。获奖选手有机会赢得若干张球票。主持人拿出 N 张卡片(上面写着 1⋯⋯N 的数字),打乱顺序,排成一个圆圈。你可以从任意一张卡片开始顺时......
  • 蓝桥杯 统计子矩阵
    题目描述给定一个N×M的矩阵A,请你统计有多少个子矩阵(最小1×1,最大N×M)满足子矩阵中所有数的和不超过给定的整数K? 输入格式第一行包含三个整......
  • 蓝桥杯 易错题 特殊时间 c++
    问题描述2022年2月22日22:20是一个很有意义的时间,年份为2022,由3个2和1个0组成,如果将月和日写成4位,为0222,也是由3个2和1个0组成,如果将时间中的......
  • Luogu P8773 [蓝桥杯 2022 省 A] 选数异或
    https://www.luogu.com.cn/problem/P8773因为\(a\texttt{xor}b=c\)则\(a\texttt{xor}c=b\),对于\(a_i\)找到\(a_i\texttt{xor}x\)离其最近的位置,放在ST......
  • Luogu P8710 [蓝桥杯 2020 省 AB1] 网络分析
    https://www.luogu.com.cn/problem/P7191发现一个性质:最多只会合并\(n-1\)次(类似树只有\(n-1\)条边)。于是在合并的时候暴力统计即可。时间复杂度\(O(n^2+m)\)。......
  • 蓝桥杯 枚举2 27题 直线
    题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上,那么这些点中任意两......