2018 蓝桥杯 全球变暖(dfs) 深度优先遍历写法

2023-11-23 01:00

本文主要是介绍2018 蓝桥杯 全球变暖(dfs) 深度优先遍历写法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

蓝桥杯 全球变暖(dfs)

这是2018年蓝桥杯C语言省赛B组的第九题

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

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

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

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

输出
一个整数表示答案。

样例输入
3
样例输出
1

OJ链接

思路:在接收初始图之后,首先搜索查找初始岛屿数,在找到一个岛屿后,对整个岛屿进行标记,防止重复计数。随后再次进行搜索,如果有四周均为陆地的坐标,则标记此坐标未被淹没。最后查找所有未被淹没的坐标,并将坐标所处的整个岛标记,防止重复计数。初始岛屿数量减去未被淹没岛的数量,即为被淹没的岛的数量。

AC代码

#include <bits/stdc++.h>
using namespace std;char maps[1001][1001];void dfs1(int x,int y)
{if(maps[x][y]!='#')return;maps[x][y]='1';//将#标记为1 dfs1(x+1,y);//把整个岛都进行标记 防止重复计算 dfs1(x-1,y);dfs1(x,y+1);dfs1(x,y-1);
} void dfs2(int x,int y)
{if(maps[x][y]=='.')return;if(maps[x+1][y]=='1'&&maps[x-1][y]=='1'&&maps[x][y+1]=='1'&&maps[x][y-1]=='1')//四周都是陆地 则标记为2{	maps[x][y]='2'; } dfs1(x+1,y);//找4个方向 dfs1(x-1,y);dfs1(x,y+1);dfs1(x,y-1);
} void dfs3(int x,int y)
{if(maps[x][y]=='.')return;maps[x][y]='.';//将#标记为 . dfs3(x+1,y);//把整个岛都进行沉没操作 防止重复计算 dfs3(x-1,y);dfs3(x,y+1);dfs3(x,y-1);
} int main()
{int n,first_num=0,end_num=0;//层数 初始岛屿数量 末尾岛屿数量 scanf("%d",&n); for(int a=1;a<=n;a++){for(int b=1;b<=n;b++){while(1){scanf("%c",&maps[a][b]);if(maps[a][b]=='.'||maps[a][b]=='#')break;}}}//先查找有多少个岛屿 for(int a=1;a<=n;a++){for(int b=1;b<=n;b++){if(maps[a][b]=='#'){dfs1(a,b);first_num++;//初始岛屿+1 }}}//再对整个岛屿进行变化for(int a=1;a<=n;a++){for(int b=1;b<=n;b++){if(maps[a][b]=='1'){dfs2(a,b);}}}//最后查找剩余多少个岛屿 for(int a=1;a<=n;a++){for(int b=1;b<=n;b++){if(maps[a][b]=='2'){dfs3(a,b);end_num++;//最终岛屿+1 }}}cout<<first_num-end_num;return 0;
}

这篇关于2018 蓝桥杯 全球变暖(dfs) 深度优先遍历写法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/414192

相关文章

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Python实现阶乘的四种写法

《Python实现阶乘的四种写法》本文主要介绍了Python实现阶乘的六种写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录第一种:推导式+循环遍历列表内每个元素相乘第二种:调用functools模块reduce的php累计

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

hdu1180(广搜+优先队列)

此题要求最少到达目标点T的最短时间,所以我选择了广度优先搜索,并且要用到优先队列。 另外此题注意点较多,比如说可以在某个点停留,我wa了好多两次,就是因为忽略了这一点,然后参考了大神的思想,然后经过反复修改才AC的 这是我的代码 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

hdu 2489 (dfs枚举 + prim)

题意: 对于一棵顶点和边都有权值的树,使用下面的等式来计算Ratio 给定一个n 个顶点的完全图及它所有顶点和边的权值,找到一个该图含有m 个顶点的子图,并且让这个子图的Ratio 值在所有m 个顶点的树中最小。 解析: 因为数据量不大,先用dfs枚举搭配出m个子节点,算出点和,然后套个prim算出边和,每次比较大小即可。 dfs没有写好,A的老泪纵横。 错在把index在d

poj 3190 优先队列+贪心

题意: 有n头牛,分别给他们挤奶的时间。 然后每头牛挤奶的时候都要在一个stall里面,并且每个stall每次只能占用一头牛。 问最少需要多少个stall,并输出每头牛所在的stall。 e.g 样例: INPUT: 51 102 43 65 84 7 OUTPUT: 412324 HINT: Explanation of the s

poj 3050 dfs + set的妙用

题意: 给一个5x5的矩阵,求由多少个由连续6个元素组成的不一样的字符的个数。 解析: dfs + set去重搞定。 代码: #include <iostream>#include <cstdio>#include <set>#include <cstdlib>#include <algorithm>#include <cstring>#include <cm