PTA L2-048 寻宝图

给定一幅地图,其中有水域,有陆地。被水域完全环绕的陆地是岛屿。有些岛屿上埋藏有宝藏,这些有宝藏的点也被标记出来了。本题就请你统计一下,给定的地图上一共有多少岛屿,其中有多少是有宝藏的岛屿。

输入格式:

输入第一行给出 2 个正整数 N 和 M(1<N×M≤105),是地图的尺寸,表示地图由 N 行 M 列格子构成。随后 N 行,每行给出 M 位个位数,其中 0 表示水域,1 表示陆地,2-9 表示宝藏。
注意:两个格子共享一条边时,才是“相邻”的。宝藏都埋在陆地上。默认地图外围全是水域。

输出格式:

在一行中输出 2 个整数,分别是岛屿的总数量和有宝藏的岛屿的数量。

输入样例:

10 11
01000000151
11000000111
00110000811
00110100010
00000000000
00000111000
00114111000
00110010000
00019000010
00120000001

输出样例:

7 2

思路:

我们把图整个遍历一遍,若碰到1 - 9之间的数,则把与它相邻的非0数都染成大于9的数,最后染得次数即为岛屿总数。在把一个岛屿染色的过程中若碰到了非1的数,则该岛屿有宝藏,我们单独记录即可。

做法:

1.存图

2.遍历图

        2.1.遇到了陆地

                2.1.1.染色

                        2.1.1.1.若有宝藏,单独记录

                

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>using namespace std;vector<vector<int>> g;
int n,m,idx = 10;int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
int dfs(int x,int y)
{int flag = 0;if(g[x][y] != 1) flag++;//有宝藏g[x][y] = idx;for(int i = 0;i < 4;i++){int x1 = x + dx[i],y1 = y + dy[i];if(x1 < 0 || x1 >= n || y1 < 0 || y1 >= m || g[x1][y1] == 0 || g[x1][y1] >= 10) continue;if(dfs(x1,y1)) flag++;}if(flag) return 1;//找到了宝藏else return 0;
}int main()
{scanf("%d%d",&n,&m);for(int i = 0;i < n;i++){getchar();vector<int> a(m);for(int j = 0;j < m;j++){char t = 0;scanf("%c",&t);a[j] = t - '0';}g.push_back(a);}int cnt = 0;for(int i = 0;i < n;i++)for(int j = 0;j < m;j++)if(1 <= g[i][j] && g[i][j] <= 9)//遇到了陆地{idx++;if(dfs(i,j)) cnt++;//有宝藏}printf("%d %d",idx - 10,cnt);return 0;
}

结果:

 

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

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

相关文章

(4)(4.5) Underwater Sonar (Analog)

文章目录 前言 1 推荐硬件 2 连接和配置 3 参数说明 前言 本页详细介绍了低成本模拟水下声纳&#xff08;又称"探鱼器"&#xff09;和数字转换器的设置&#xff0c;数字转换器可将模拟读数转换成 NMEA 0183&#xff0c;供 ardupilot 读取。这种设置可以测量船下…

Linux操作系统之防火墙、redis安装

目录 一、防火墙 1、防火墙的类别 2、安装iptables(四表五链&#xff09; 一、防火墙 1、防火墙的类别 安全产品 杀毒 针对病毒&#xff0c;特征篡改系统中文件杀毒软件针对处理病毒程序 防火墙 针对木马&#xff0c;特征系统窃密 防火墙针对处理木马 防火墙分为两种 硬件…

Flume 拦截器概念及自定义拦截器的运用

文章目录 Flume 拦截器拦截器的作用拦截器运用1.创建项目2.实现拦截器接口3.编写事件处理逻辑4.拦截器构建5.打包与上传6.编写配置文件7.测试运行 Flume 拦截器 在 Flume 中&#xff0c;拦截器&#xff08;Interceptors&#xff09;是一种可以在事件传输过程中拦截、处理和修改…

静态路由协议实验1

要求&#xff1a; 使用静态路由协议使得全网可达。 第一步、规划IP地址。并配置IP。 第二步、写静态路由 [r1]ip route-static 192.168.3.0 24 192.168.2.2 [r1]ip route-static 192.168.4.0 24 192.168.2.2 [r1]ip route-static 192.168.5.0 24 192.168.2.2[r2]ip route-st…

函数最小值(堆)

P2085 最小函数值 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include<queue> #include<algorithm> #include<vector> #include<cstring> using namespace std; #define ll long long const int N1e4100; int n,m; stru…

从头开发一个RISC-V的操作系统(三)编译与链接

文章目录 前提GCCGCC简介GCC的主要执行步骤GCC涉及的文件类型 ELFELF简介ELF文件格式ELF文件处理工具&#xff1a;Binutils 练习参考链接 目标&#xff1a;通过这一个系列课程的学习&#xff0c;开发出一个简易的在RISC-V指令集架构上运行的操作系统。 前提 这个系列的大部分文…

开一家视频号小店需要多少费用?费用详细解读,不让你多花一分钱

大家好&#xff0c;我是电商花花。 今天来给大家聊聊视频号小店开店需要多少费用的问题&#xff0c;很多人都知道现在做视频号小店是红利&#xff0c;能赚钱&#xff0c;但是却不知道视频号小店也能做无货源电商模式。 接下来&#xff0c;我来给大家讲一下开一家视频号小店都…

Redis Stack 安装部署

参考&#xff1a;Run Redis Stack on Docker | Redis Redis-stack 初体验_redis stack-CSDN博客 【docker】运行redis_docker run redis-stack-server requirepass-CSDN博客 Redis Stack 是一组软件套件&#xff0c;它主要由三部分组成。 一个是 Redis Stack Server&#x…

汽车网络安全管理

汽车网络安全管理 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c…

计算机视觉的应用26-关于Fast-R-CNN模型的应用场景,Fast-R-CNN模型结构介绍

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用26-关于Fast-R-CNN模型的应用场景&#xff0c;Fast-R-CNN模型结构介绍。Fast R-CNN是一种深度学习模型&#xff0c;主要用于目标检测任务&#xff0c;尤其适用于图像中物体的识别与定位。该模型在基…

面经分享(Flask,轻量级Web框架)

1. Flask的核心特点 a. 轻量级&#xff1a;核心简洁&#xff0c;只提供了基本的功能&#xff0c;其他高级功能可以通过插件或扩展来添加。 b. 灵活性&#xff1a;允许开发者选择适合自己项目的组件和工具&#xff0c;没有强制的项目结构和设计模式。 c. 易于扩展&#xff1a;提…

Revit模型进入虚幻引擎UE5教程

一、背景 小伙伴们是否有Revit进入虚幻引擎交互的需求呢&#xff1f; 二、实现功能 1.Revit进入虚幻UE5,包含模型属性&#xff0c;材质等 2.实现BIM构件点选&#xff0c;高亮&#xff0c;属性展示 3.实现BIM模型分层显示&#xff0c;爆炸等效果 三、教程地址 教程&#x…