蓝桥杯:全球变暖

在这里插入图片描述格式要求
在这里插入图片描述
样例
在这里插入图片描述
题解:题目的关键 是如何判断一个连通块(岛屿) 采用深搜

#include<iostream>
using namespace std;
int n;
//地图数组
char map[1010][1010]; 
//标记是否搜过的数组
int vis[1010][1010]={0};  
//四个方向 上右下左
int d[4][2] = {{0,-1},{1,0},{0,1},{-1,0}}; 
//用于标记这个岛中是否被完全淹没
int flag = 0;
void dfs(int x, int y){
    //标记这个'#'被搜过。
    vis[x][y] = 1;      
     //上下左右四个方向都是陆地,该‘#’不会淹没
    if(map[x][y+1]=='#' && map[x][y-1]=='#' && map[x+1][y]=='#' && map[x-1][y]=='#'){
        //即该‘#’所在的岛屿不会被淹没
         flag = 1;     
    }
    //继续深搜周围的陆地 四个方向
    for(int i = 0; i < 4; i++){ 
        int nx = x + d[i][0], ny = y + d[i][1];
         //继续DFS未搜过的陆地,目的是标记它们
        if(vis[nx][ny]==0 && map[nx][ny]=='#')
            dfs(nx,ny);
    }
}
int main(){
    cin >> n;
    //读入地图
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            cin >> map[i][j];
    //会被淹没的岛屿数量
    int ans = 0 ;
    //DFS所有像素点
    for(int i = 1; i <= n; i++)  
        for(int j = 1; j <= n; j++)
            //没有被搜过且是‘#’
            if(map[i][j]=='#' && vis[i][j]==0){
                flag = 0;
                //深搜这个'#'所在岛
                dfs(i,j);
                //这个岛全部被淹
                if(flag == 0){
                    //会被淹没的岛屿数量加1
                    ans++;     
                }
            }
    cout<<ans<<endl;
    return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值