蓝桥杯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;
}

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

相关推荐
minstbe几秒前
AI开发 - 算法基础 递归 的概念和入门(二)汉诺塔问题 递归的应用和使用注意 - Python
开发语言·python·算法
TANGLONG22225 分钟前
【初阶数据结构与算法】八大排序之非递归系列( 快排(使用栈或队列实现)、归并排序)
java·c语言·数据结构·c++·算法·蓝桥杯·排序算法
不想当程序猿_28 分钟前
【蓝桥杯每日一题】与或异或——DFS
c++·算法·蓝桥杯·深度优先
就爱学编程38 分钟前
力扣刷题:单链表OJ篇(下)
算法·leetcode·职场和发展
小白—人工智能1 小时前
有一个4*5的矩阵如下,要求编写程序计算总和与平均值,并找出其中值最大的那个元素输出,以及其所在的行号和列号。
数据结构·python·算法·矩阵
邂逅岁月1 小时前
滑不动窗口的秘密—— “滑动窗口“算法 (Java版)
算法·面试·求职招聘·创业创新·刷题
sunny-ll1 小时前
【C++】explicit关键字详解(explicit关键字是什么? 为什么需要explicit关键字? 如何使用explicit 关键字)
c语言·开发语言·c++·算法·面试
轩源源1 小时前
C++草原三剑客之一:继承
开发语言·数据结构·c++·算法·青少年编程·继承·组合
半盏茶香4 小时前
C语言勘破之路-最终篇 —— 预处理(下)
c语言·开发语言·c++·算法
pianmian18 小时前
贪心算法.
算法·贪心算法