蓝桥杯2018省赛全球变暖dfs

全球变暖

问题描述


格式输入


格式输出

输出一个整数


样例输入


样例输出

1


评测用例规模与约定

  1. 最大运行时间:1s
  2. 最大运行内存: 256M

解析

采用dfs的方式进行搜索,首先输入地图之后进行搜索判断所有岛屿的数量,所有不会被淹没的岛屿的数量(因为只要有一块不和水相接就可以判断为是不会被淹没的所以才取它),然后相减即可得到被淹没的岛屿的数量。


参考程序

c 复制代码
#include<bits/stdc++.h>
using namespace std;
int n;
const int N = 1e4+4; 
char area[N][N];
bool flag;
int cnt; 
int d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};//往四个方向走
int ans=0;//没有被淹没岛屿的数量 
int res=0;//岛屿的总数量 
//用DFS判断搜到的这个岛屿会不会被淹没
void dfs(int x,int y)
{
    if(flag==false){ //一个岛屿只要有一个点满足就不会变淹没了
        cnt = 0;
    for(int i=0; i<4; i++){
        int tx=d[i][0]+x;
        int ty=d[i][1]+y;
        if(area[tx][ty]!='.')
        cnt++;
    }
    if(cnt==4){//有一个点满足不会被淹没的条件
        ans++;
        flag=true;//这个岛屿不需要再遍历了
         }
    }
    area[x][y]='*';//将遍历过的点变为 *,下一次就不会遍历了,所以不用标记数组
    //注意这里不可以是'.'因为上面if(area[tx][ty]!='.')cnt++
     for(int i=0;i<4;i++){
         int xx = x + d[i][0];
         int yy = y + d[i][1];
         if(area[xx][yy]=='#'&&x<N&&x>=0&&y<N&&y>=0)
         dfs(xx,yy);
    }
}
 
int main()
{    
     cin>>n; 
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
            cin>>area[i][j];
            
    for(int i=0; i<n; i++){ 
        for(int j=0; j<n; j++){
            if(area[i][j]=='#'){
                res++;
                flag=false;
                dfs(i,j);
            }
        }
    }        
    cout<<res-ans;    
    return 0;
}

以个人刷题整理为目的,如若侵权,请联系删除~

相关推荐
搞科研的小刘选手2 分钟前
【香港大学主办&IEEE出版】第六届计算机视觉、应用与算法国际学术会议(CVAA 2026)
算法·计算机视觉·应用·学术会议
Java小白笔记9 分钟前
Codex config.toml配置实战指南
人工智能·算法·chatgpt·ai编程·集成学习
王老师青少年编程16 分钟前
2026年6月GESP真题及题解(C++七级):消消乐
数据结构·c++·算法·真题·gesp·2026年6月
z小猫不吃鱼28 分钟前
模型剪枝经典论文精读:Pruning Filters for Efficient ConvNets
算法·机器学习·剪枝
Fox爱分享2 小时前
字节二面:1000瓶酒,有一瓶是毒药,多少只老鼠可以查出来?
算法·面试·程序员
+wacyltd大模型备案算法备案2 小时前
大模型评估测试题库怎么建?风险分类、测试样本的完整方法
人工智能·算法·安全·分类·大模型·大模型备案·大模型上线登记
Fox爱分享2 小时前
字节二面智力题:100只老虎和1只羊关在一起,这只羊会不会被吃?
算法·面试·程序员
xin(n_n)b3 小时前
经典题目(3):把数字翻译成字符串;兑换零钱
算法
惊鸿一博3 小时前
特征匹配+Glue Factory 框架评估特征提取与匹配算法时常用的度量标准
算法·特征匹配
柒和远方3 小时前
LeetCode 4. 寻找两个正序数组的中位数 —— 二分划分的艺术
javascript·python·算法