F.岛屿个数【蓝桥杯】/dfs+环

岛屿个数

小蓝得到了一副大小为 M × N 的格子地图,可以将其视作一个只包含字符‘0’(代表海水)和 ‘1’(代表陆地)的二维数组,地图之外可以视作全部是海水,每个岛屿由在上/下/左/右四个方向上相邻的 ‘1’ 相连接而形成。

在岛屿 A 所占据的格子中,如果可以从中选出 k 个不同的格子,使得他们的坐标能够组成一个这样的排列:(x0, y0),(x1, y1), . . . ,(xk−1, yk−1),其中(x(i+1)%k , y(i+1)%k) 是由 (xi , yi) 通过上/下/左/右移动一次得来的 (0 ≤ i ≤ k − 1),

此时这 k 个格子就构成了一个 “环”。如果另一个岛屿 B 所占据的格子全部位于这个 “环” 内部,此时我们将岛屿 B 视作是岛屿 A 的子岛屿。若 B 是 A 的子岛屿,C 又是 B 的子岛屿,那 C 也是 A 的子岛屿。

请问这个地图上共有多少个岛屿?在进行统计时不需要统计子岛屿的数目。
在这里插入图片描述

对于第一组数据,包含两个岛屿,下面用不同的数字进行了区分:
01111
11001
10201
10001
11111
岛屿 2 在岛屿 1 的 “环” 内部,所以岛屿 2 是岛屿 1 的子岛屿,答案为 1。

对于第二组数据,包含三个岛屿,下面用不同的数字进行了区分:
111111
100001
020301
100001
111111

注意屿 3 并不是岛屿 1 或者岛屿 2 的子岛屿,因为岛屿 1 和岛屿 2 中均没有“环”。

对于 30% 的评测用例,1 ≤ M, N ≤ 10。
对于 100% 的评测用例,1 ≤ T ≤ 10,1 ≤ M, N ≤ 50。

dfs+环

搜出所有的岛屿,这个不难做到。由于岛屿之间相互隔离,则如果岛屿的一个格子在一个环内,那么整个岛屿也都在环内。遍历所有的岛屿,选中当前岛屿的第一个格子,搜索周围海洋,若能搜索到地图的边界外,则此岛屿不在任何一个环内;否则,此岛屿在某个环内,岛屿数量减一。

注意:搜索海洋时要搜索八个方向!!详见第二个示例,只搜四个方向不行。

#include <iostream>
using namespace std;
int b[4]={1,0,-1,0};
int c[4]={0,1,0,-1};
int d[8]={1,0,-1,0,1,1,-1,-1};
int e[8]={0,1,0,-1,1,-1,1,-1};
void dfs(char a[][55],int visited[][55],int x,int y,int m,int n)
{visited[x][y]=1;for(int i=0;i<4;i++){int xx=x+b[i],yy=y+c[i];if(xx>=0&&xx<m&&yy>=0&&yy<n&&a[xx][yy]=='1'&&!visited[xx][yy]) dfs(a,visited,xx,yy,m,n);}
}
bool ifHuan(char a[][55],int visit[][55],int x,int y,int m,int n)
{visit[x][y]=1;for(int i=0;i<8;i++){int xx=x+d[i],yy=y+e[i];if(xx<0||xx>=m||yy<0||yy>=n) return 1;else if(a[xx][yy]=='0'&&!visit[xx][yy]&&ifHuan(a,visit,xx,yy,m,n)) return 1; }return 0;
}
int main()
{int t;cin>>t;for(int i=0;i<t;i++){int m,n;cin>>m>>n;char a[55][55];for(int j=0;j<m;j++) {for(int k=0;k<n;k++) {cin>>a[j][k];}}int visited[55][55];for(int j=0;j<55;j++) for(int k=0;k<55;k++) visited[j][k]=0;int res=0;for(int j=0;j<m;j++){for(int k=0;k<n;k++){if(a[j][k]=='1'&&!visited[j][k]){dfs(a,visited,j,k,m,n);res++;int visit[55][55];for(int t=0;t<m;t++) for(int r=0;r<n;r++) visit[t][r]=0;if(!ifHuan(a,visit,j,k,m,n)) res--;}}}cout<<res<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/536706.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

191基于matlab的信号谱估计

基于matlab的信号谱估计&#xff0c;间接法双谱估计 &#xff0c;bispeci返回用间接法从有限个观测信号中估计出的双谱bispec&#xff0c;并且用等高线图显示。直接法双谱估计 &#xff0c;bispecd返回估计双谱矩阵&#xff0c;原点在中心&#xff0c;轴的方向是向下与向右 。程…

2024腾讯云轻量主机地域怎么选择?上海/北京/广州哪个地域好?

腾讯云轻量应用服务器地域如何选择&#xff1f;地域就近选择&#xff0c;北方选北京地域、南方选广州地域&#xff0c;华东地区选上海地域。广州上海北京地域有什么区别&#xff1f;哪个好&#xff1f;区别就是城市地理位置不同&#xff0c;其他的差不多&#xff0c;不区分好坏…

AI论文速读 | 计时器(Timer):用于大规模时间序列分析的Transformer

题目&#xff1a; Timer: Transformers for Time Series Analysis at Scale 作者&#xff1a;Yong Liu,&#xff08;刘雍&#xff09;, Haoran Zhang&#xff08;张淏然&#xff09;, Chenyu Li&#xff08;李晨宇&#xff09;, Jianmin Wang&#xff08;王建民&#xff09;, …

pycharm 历史版本下载地址

pycharm 历史版本下载地址 老版本能用就行&#xff0c;不需要搞最新的&#xff0c;当然了&#xff0c;有些小伙伴就是喜欢新的&#xff08;最先吃螃蟹&#xff09; 博主就不搞最新了&#xff0c;哈哈 上菜&#xff1a; https://www.jetbrains.com/pycharm/download/other.html…

新零售SaaS架构:什么是线上商城系统?

零售商家为什么要建设线上商城 传统的实体门店服务范围有限&#xff0c;只能吸引周边500米内的消费者。因此&#xff0c;如何拓展服务范围&#xff0c;吸引更多消费者到店&#xff0c;成为了店家迫切需要解决的问题。 缺乏忠实顾客&#xff0c;客户基础不稳&#xff0c;往往是…

数字人基础 | 3D手部参数化模型2017-2023

楔子: 2017年年底的泰国曼谷, SIGGRAPH Asia会议上, 来自马普所的 Javier Romero, Dimitrios Tzionas(两人都是 Michael J. Black的学生)发布了事实性的手部参数化模型标准: MANO [1]。 MANO的诞生意味着 Michael J. Black团队在继人体参数化模型 SMPL后, 事实性的将能够表达人…

Python导入类说一说

要在Python中导入一个类&#xff0c;需要使用import关键字。 详细去看下面的代码 1、多例类 class Restaurant:餐馆类def __init__(self,restaurant_name,cuisine_type):#类的属性self.restaurant_name restaurant_nameself.cuisine_type cuisine_type# self.stregth_leve…

应对恶意IP攻击的有效方法

在当今数字化时代&#xff0c;网络攻击已经成为了互联网安全的重大挑战之一。恶意IP攻击是网络安全领域中的一种常见威胁&#xff0c;它可能导致数据泄露、服务中断、系统瘫痪等严重后果。因此&#xff0c;有效地应对恶意IP攻击至关重要。IP数据云将深入探讨如何应对恶意IP攻击…

【LeetCode热题100】240. 搜索二维矩阵 II

一.题目要求 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 ‘每列的元素从上到下升序排列。 二.题目难度 中等 三.输入样例 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7…

安装MySQL8.0及以上版本操作步骤

关于mysql安装过程中命令mysqld --initialize --console出错的解答 C:\mysql-8.3.0-winx64\bin>mysqld --initialize --usermysql --console 2024-03-12T11:21:23.201387Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start. 2024-03-12T11:21:23.2068…

Qt+FFmpeg+opengl从零制作视频播放器-4.音频解码

首先一个完整的MP4文件解封装之后&#xff0c;得到了压缩的音频数据&#xff0c;这个数据是不能直接拿去播放的&#xff0c;我们需要解码成原始的PCM数据才能够播放&#xff0c;解码音频数据&#xff0c;如下图所示&#xff0c;把MP3或者AAC数据解码成原始的数据pcm。 音频解码…

【BFS二叉树】113路径总和II

113路径总和 II 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 思路&#xff1a; 题目最终输出的是路径&#xff0c;因此用BFS遍历的时候&#xff0c;需要记录走到每个节点的路径&#xff1…