给定一幅地图,其中有水域,有陆地。被水域完全环绕的陆地是岛屿。有些岛屿上埋藏有宝藏,这些有宝藏的点也被标记出来了。本题就请你统计一下,给定的地图上一共有多少岛屿,其中有多少是有宝藏的岛屿。
输入格式:
输入第一行给出 2 个正整数 N N N 和 M M M ( 1<N×M≤105 ),是地图的尺寸,表示地图由 N N N 行 M M M 列格子构成。随后 N N N 行,每行给出 M M M 位个位数,其中 0 表示水域,1 表示陆地,2-9 表示宝藏。
注意:两个格子共享一条边时,才是“相邻”的。宝藏都埋在陆地上。默认地图外围全是水域。
输出格式:
在一行中输出 2 个整数,分别是岛屿的总数量有宝藏的岛屿的数量

输入样例:

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

输出样例:

7 2

解题思路:
题目给出的范围 1<N×M≤105 可以看出 N N N 和 M M M 的范围是不一定是一样的,那么我的想法就是有多少行就有多少个字符串,都存在 vector 里。然后就是熟悉的BFS了,先在主函数遍历里找是岛屿的坐标(字符不为’0’的),利用BFS遍历岛屿并且判断其中有无宝藏。岛屿的总数量就是在主函数找到未访问岛屿的次数,宝藏岛屿数量就看BFS遍历的每个岛屿中含有宝藏(一个或多个)的次数。

#include <bits/stdc++.h>
using namespace std;int n, m;
typedef pair<int, int> PII;
map<PII, bool> vis;
vector<string> mp;//判断坐标位置是否是岛屿且未被访问
bool judge(int x, int y)
{if((x>=0&&x<n) && (y>=0&&y<m) && mp[x][y]-'0' && !vis[{x, y}])return true;return false;
}int dx[] = {0, 1, -1, 0};
int dy[] = {1, 0, 0, -1};
int bfs(int a, int b)
{queue<PII> q;q.push({a, b});vis[{a, b}] = true;bool have=false;while(q.size()){int x = q.front().first;int y = q.front().second;q.pop();//判断当前岛屿坐标是否为宝藏if(mp[x][y]>='2' && mp[x][y]<='9') have = true;for(int i=0; i<4; i++){int nx = x+dx[i];int ny = y+dy[i];if(judge(nx, ny)){vis[{nx, ny}] = true;q.push({nx, ny});}}}if(have) return 1;return 0;
}int main()
{cin>>n>>m;getchar();for(int i=0; i<n; i++){string s;getline(cin, s);mp.push_back(s);}int cnt = 0, val = 0;for(int i=0; i<n; i++){for(int j=0; j<m; j++){//找未被访问的岛屿坐标if(!(mp[i][j]-'0') || vis[{i, j}]) continue;val += bfs(i, j);cnt++;}}cout<<cnt<<' '<<val;return 0;
}

2023GPLT正赛 L2-4 寻宝图相关推荐

  1. PTA 校选拔 7-10 宇航员的寻宝图(BFS)

    [题目描述] 宇航员为了能够到达宇宙飞船发射场,必须拥有足够的晶体,以获得能量.但是他们获得晶体并不容易,晶体被隐藏在某个地方.为了帮助宇航员得到晶体,现在有一张藏宝图,宇航员可以根据藏宝图寻找晶体. ...

  2. 网络寻宝图 v1.0 官方

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

  3. PTA L2-048 寻宝图

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

  4. L2-048 寻宝图

    L2-048 寻宝图 分数 25 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 给定一幅地图,其中有水域,有陆地.被水域完全环绕的陆地是岛屿.有些岛屿上埋藏有宝藏,这些有宝藏的点也被标记出来了. ...

  5. L2-048 寻宝图(25分)

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

  6. 【2023团体程序设计天梯赛CCCC】GPLT2023,L1~L2部分(PTA,L1-089~L1-096,L2-045~L2-048)题解代码复盘

    文章目录 概要 L1-089 最好的文档 5 L1-090 什么是机器学习 5 L1-091 程序员买包子 10 L1-092 进化论 10 L1-093 猜帽子游戏 15 L1-094 剪切粘贴 1 ...

  7. 2023团体程序设计天梯赛--正式赛

    L1-1 最好的文档 有一位软件工程师说过一句很有道理的话:"Good code is its own best documentation."(好代码本身就是最好的文档).本题就 ...

  8. 【项目管理】你理解的项目管理是什么样的?

    导读:不同角色对项目管理的理解不尽相同,在项目实施不同阶段的理解也不尽相同,对于现实中的项目管理会遇到哪些挑战?你对所要管理的项目对象又有怎样的认识?你理解的项目管理还仅仅停留在软件功能开发吗?项目管 ...

  9. 下周开幕,给深圳的电子工程师准备的展会!

    我和电子圈老江认识很久了,应该是2012年,小龙第一次参加电子圈年会,那年他年会中奖的奖品送给我.后来,我也加入了电子圈的QQ群,早些年的时候,大家都喜欢在QQ群聊天,后来才慢慢转到微信群. 老江是在 ...

最新文章

  1. 《OpenCV3编程入门》学习笔记6 图像处理(五)漫水填充
  2. error LNK1104: 无法打开文件“ComService.lib”
  3. 2018华南理工大学程序设计竞赛 H-对称与反对称
  4. tkinter 布局_第八弹:读者问有tkinter的资料吗?
  5. linux 权限777_Linux编程之权限系统与工具使用(二)
  6. 显示js对象所有属性和方法的函数
  7. 科大讯飞:5年内 科技会场没机器人端茶倒水就太low了
  8. BytePS源码解析
  9. 软考中级–软件设计师考试大纲
  10. web前端开发技术----登录页面
  11. Axure模板库(2)-注册登录
  12. 【音频】G711编码原理
  13. 英语面试自我介绍范文
  14. mysql中文排序(按照中文拼音顺序排序)
  15. matlab 读取mdf文件路径,通过 MDF 数据存储使用 MDF 文件
  16. 三日济州岛,何以韩国人眼光?-让自己慢下来(43)
  17. Windows 10 (Multiple Editions), Version 1607
  18. ico图标和制作网站(比特虫)
  19. yum到底是干什么的?
  20. 王一博VS“虚拟人”?乐华“永不塌房”的偶像计划可行吗?

热门文章

  1. iOS获取WIFI配置信息,WIFI名称、网关(路由器地址)、本机IP地址、DNS
  2. python计算营业额代码_python计算营业额的代码_python 统计代码行数简单实例
  3. Python视频制作引擎Manim安装教程2021版(科学概念可视化)
  4. 基于Curator的Zookeeper操作实战
  5. 一张关系图助你清晰认识各种O。PO、BO、DTO、VO关系图,够直观
  6. 2022 年十大最佳网络分析工具介绍
  7. 菜鸟打印自定义区域设置
  8. 晶振电路并联一个电阻作用
  9. 案例—考勤后台管理系统需求
  10. Jetpack之LiveData