L2-048 寻宝图(PTA)

文章目录

  • L2-048 寻宝图
    • 题目描述
    • bfs
    • 踩到的坑

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

bfs

以下是对于上述代码的详细注释,解释了代码的每一个部分的功能和目的:

#include<bits/stdc++.h> // 包含几乎所有常用的库,方便快捷但不推荐在大型项目中使用
using namespace std;const int z=1e5+10; // 定义常量z作为地图的最大尺寸string g[z]; // 定义一个字符串数组g,用于存储地图的每一行
int dx[]={0,0,-1,1}; // 定义x方向的移动数组,表示上下左右移动
int dy[]={-1,1,0,0}; // 定义y方向的移动数组,表示上下左右移动
typedef pair<int,int> pii; // 定义pii为pair<int,int>的别名,用于存储坐标int main()
{int n,m; // 定义n和m分别表示地图的行数和列数int ans=0,cnt=0; // ans用来计数岛屿总数,cnt用来计数有宝藏的岛屿数量cin>>n>>m; // 读入n和mfor(int i=0;i<n;i++)cin>>g[i]; // 循环读入地图的每一行for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(g[i][j]!='0') // 如果当前位置不是水域{ans++; // 岛屿总数加1queue<pii> p; // 定义一个队列p,用于宽度优先搜索(BFS)p.push({i,j}); // 将当前坐标加入队列int flag=0; // 定义flag标志是否找到宝藏if(g[i][j]>'1') flag=1; // 如果当前位置是宝藏,设置flag为1g[i][j]='0'; // 将当前位置标记为已访问while(p.size()) // 当队列不为空时循环{auto t=p.front(); // 获取队列前面的元素p.pop(); // 弹出队列前面的元素for(int k=0;k<4;k++) // 查看四个方向的相邻位置{int tx=t.first+dx[k]; // 计算x方向的新坐标int ty=t.second+dy[k]; // 计算y方向的新坐标if(tx>=0&&tx<n&&ty>=0&&ty<m&&g[tx][ty]!='0') // 如果新坐标在地图内且不是水域{if(g[tx][ty]>'1') flag=1; // 如果新坐标是宝藏,设置flag为1p.push({tx,ty}); // 将新坐标加入队列g[tx][ty]='0'; // 将新坐标标记为已访问}}}if(flag==1) cnt++; // 如果找到宝藏,有宝藏岛屿数加1}}}cout<<ans<<" "<<cnt; // 输出岛屿总数和有宝藏的岛屿数量return 0;
}

这段代码基本上实现了题目的要求:统计地图上的岛屿总数和有宝藏的岛屿数量。代码主体使用了宽度优先搜索(BFS)来探索每个岛屿,并且在探索的过程中检查岛屿上是否有宝藏。探索过程中,为了避免重复访问,会将访问过的陆地点标注为水域(‘0’)。如果在探索特定岛屿的过程中遇到标记数值大于’1’的格子,则认为这个岛屿含有宝藏。

踩到的坑

  1. 我对宝藏的判断只放在了从第一个陆地进来后开始拓展的bfs中,漏掉了万一进来时候就是宝藏的情况
    例如:从2(宝藏)进来时我就漏掉了这种情况
211
110
100
  1. 段错误:我一开始还加了一个字符串d(string d[z]),用来判断当前位置有没有遍历过,开了两个太大的字符串,最后两个测试点出现的段错误

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

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

相关文章

Godot3D学习笔记1——界面布局简介

创建完成项目之后可以看到如下界面&#xff1a; Godot引擎也是场景式编程&#xff0c;这里的一个场景相当于一个关卡。 这里我们点击左侧“3D场景”按钮创建一个3D场景&#xff0c;现在在中间的画面中会出现一个球。在左侧节点视图中选中“Node3D”&#xff0c;右键创建子节点…

企业车辆管理系统平台是做什么的?

企业车辆管理系统平台是一种综合性的管理系统&#xff0c;它主要集车辆信息管理、车辆调度、车辆维修、油耗管理、驾驶员管理以及报表分析等多种功能于一体。通过这个平台&#xff0c;企业可以实现对车辆的全面管理&#xff0c;优化车辆使用效率&#xff0c;降低运营成本&#…

在Windows 10中禁用Windows错误报告的4种方法,总有一种适合你

序言 在本文中&#xff0c;我们的主题是如何在Windows 10中禁用Windows错误报告。你知道什么是Windows错误报告吗&#xff1f;事实上&#xff0c;Windows错误报告有助于从用户的计算机收集有关硬件和软件问题的信息&#xff0c;并将这些信息报告给Microsoft。 它将检查任何可…

基于postCSS手写postcss-px-to-vewiport插件实现移动端适配

&#x1f31f;前言 目前前端实现移动端适配方案千千万&#xff0c;眼花缭乱各有有缺&#xff0c;但目前来说postcss-px-to-vewiport是一种非常合适的实现方案&#xff0c;postcss-px-to-vewiport是一个基于postCss开发的插件&#xff0c;其原理就是将项目中的px单位转换为vw(视…

CSS 常用样式

1.a 链接,鼠标光标为手指 cursor 属性规定要显示的光标的类型&#xff08;形状&#xff09;。 a {cursor: pointer;/*手指形态,可以指定图片*/ }2. div 文本超出长度&#xff0c;为省略号&#xff0c;悬浮文本上面显示全部文字 <div class"overflow-text">这…

day07 51单片机-18B20温度检测

18B20温度检测 1.1 需求描述 本案例讲解如何从18B20传感器获取温度信息并显示在LCD上。 1.2 硬件设计 1.2.1 硬件原理图 1.2.3 18B20工作原理 可以看到18B20有两根引脚负责供电,一根引脚负责数据交换。18B20就是通过数据线和单片机进行数据交换的。 1)18B20工作时序 2)…

Leetcode-69.x的平方根

题目描述 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 …

node.js-模块化

定义&#xff1a;CommonJS模块是为Node.js打包Javascript代码的原始方式。Node.js还支持浏览器和其他Javascript运行时使用的ECMAScript模块标准。 在Node.js中&#xff0c;每个文件都被视为一个单独的模块。 概念&#xff1a;项目是由很多个模块文件组成的 好处&#xff1a…

文件流详细介绍

文件流 使用IO操作文件时&#xff0c;要注意流关闭和释放问题! FileAccess&#xff0c;访问权限(只读&#xff0c;只写&#xff0c;可读可写) 1&#xff09;FileAccess.Read&#xff1a; 用法&#xff1a;获得对文件的读取访问权限&#xff0c;进而可以从文件中读取数据(只读)…

找不到msvcp140dll,无法继续执行代码的详细解决方法

在我们日常使用计算机进行各类工作任务的过程中&#xff0c;时常会遭遇一些突发的技术问题。比如&#xff0c;有时在运行某个重要程序或应用软件时&#xff0c;系统会突然弹出一个令人困扰的错误提示&#xff1a;“电脑提示找不到msvcp140.dll文件&#xff0c;因此无法继续执行…

AI预测福彩3D第9套算法实战化测试第1弹2024年4月22日第1次测试

经过前面多套算法的测试&#xff0c;总结了一些规律&#xff0c;对模型优化了一些参数&#xff0c;比如第8套算法的测试&#xff0c;7码的命中率由最开始的20%提高到了50%。虽然命中率有了很大的提高&#xff0c;但是由于咱们之前的算法只是为了测试和记录&#xff0c;提供的方…

20.Unity飞机大战游戏

1任务&#xff1a;使背景图动起来 2任务&#xff1a;飞机换帧动画 3任务&#xff1a;让飞机发射子弹 4任务&#xff1a;敌机出现 5任务&#xff1a;控制飞机 6任务&#xff1a;游戏碰撞逻辑 7任务&#xff1a;另外两种类型的敌机 8任务&#xff1a;拾取奖励物品换枪 9…

C语言中与内存操作有关的一些函数

前提 最近在使用C语言在开发项目时&#xff0c;要对内存进行操作。刚开始写的时候有一点迷糊&#xff0c;看了一些东西后才发现为什么说指针是C语言的灵魂&#xff0c;因为它可以对内存直接进行操作&#xff0c;多么帅的事情&#xff0c;真的是太帅了。 malloc 声明在头文件…

YOLOv9改进策略 | Conv篇 | 利用 Haar 小波的下采样HWD替换传统下采样(改变YOLO传统的Conv下采样)

一、本文介绍 本文给大家带来的改进机制是Haar 小波的下采样HWD替换传统下采样&#xff08;改变YOLO传统的Conv下采样&#xff09;在小波变换中&#xff0c;Haar小波作为一种基本的小波函数&#xff0c;用于将图像数据分解为多个层次的近似和细节信息&#xff0c;这是一种多分…

Spring AI 教程(一)概述

前言 我在23年11月那会儿关注了Spring AI项目&#xff0c;当时我恰好正热衷于大语言模型的开发&#xff0c;然而当时主流的开发语言只有Python&#xff0c;Java生态中并没有强大的框架供我们使用。 我当时也是靠一些封装OpenAI接口的SDK包来玩ChatGPT的&#xff0c;但是整体的体…

Pytorch 的数据处理 学习笔记

一. 数据集Dataset Dataset是一个抽象类&#xff0c;用于表示数据集。可以创建自定义的Dataset类来加载和准备好的数据&#xff0c;无论数据是存储在何处&#xff08;例如磁盘、内存或其他位置&#xff09;。PyTorch提供了一些内置的Dataset类&#xff0c;例如TensorDataset、…

【Interconnection Networks 互连网络】Flattened Butterfly 扁平蝶形拓扑

Flattened Butterfly 扁平蝶形拓扑 1. 传统蝶形网络 Butterfly Topology2. 扁平蝶形拓扑 Flattened Butterfly3.On-Chip Flattened Butterfly 扁平蝶形拓扑应用于片上网络 Flattened Butterfly 扁平蝶形拓扑 扁平蝶形拓扑是一种经济高效的拓扑&#xff0c;适用于高基数路由器…

Linux:Win10平台上,用VMware安装centos7.x及系统初始化的相关配置

一、安装过程的配置 1、配置分区 2、配置固定的IP地址 二、系统初始化配置 1、关闭防火墙 2、配置NAT网络环境 3、检查网络 4、配置国内yum源 5、卸载自带的JDK 6、安装JDK8

【机器学习】《机器学习建模基础》笔记

文章目录 单元0 前言单元1 数学建模与机器学习学习目标&#xff08;一&#xff09;什么是模型&#xff08;二&#xff09;数学模型的分类&#xff08;三&#xff09;数学建模的一般步骤&#xff08;四&#xff09;机器学习的概念&#xff08;五&#xff09;机器学习的分类&…

数据安全中的存储安全包含哪些内容,如何实现数据存储安全

数据安全中的存储安全主要包括以下几个核心内容&#xff1a; 数据备份与恢复&#xff1a; 定期对重要数据进行备份&#xff0c;确保在发生意外删除、破坏或灾难事件时能够快速恢复数据。使用冗余备份策略&#xff0c;如全备、增量备和差异备份&#xff0c;以及异地备份或云备份…