L2-048 寻宝图 (DFS做法)

目录

1. 题目描述

输入格式:

输出格式:

输入样例:

输出样例:

2. 思路分析

3. 代码实现


原题链接:https://pintia.cn/problem-sets/994805046380707840/exam/problems/1649748772841508875?type=7&page=1

1. 题目描述

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

输入格式:

输入第一行给出 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

2. 思路分析

联通块flood-fill问题。这题需要特别注意 1<N×M≤10^5 这个条件,所以我们不能用二维数组来直接存储(因为有可能其中一维为10^5,另一维为1,所以理论上二维数组每一维都要为10^5,但是很明显会爆,二维数组开不了这么大的空间(也就不能用二维数组读入,也不能开一个二维数组来标记,所以我就用了“染色”的思想)...为了解决这个问题,这题我采用了每一行用一个字符串存储来读入)。

联通块问题可以用DFS或BFS来解决。这里我用了深度优先搜索DFS,用ans统计总岛屿数量,ans1统计有宝藏的岛屿数量。遇到一个非'0'字符(也就是'1'和 宝藏'2'到'9')就让ans++,同时将这个非'0'字符染色为'0',然后往四个方向(上、下、左、右)搜索,这里的目的是那一片岛屿(也就是那一片为'1'的部分)都染色为‘0’。

为了判断有宝藏的岛屿,这里我开了一个全局变量f来判断这一片岛屿是否有宝藏(也就是有无字符'2'-'9'),当搜到字符'2'~'9'时就将f标记为1。

为了实现上、下、左、右搜索,这里我开了两个方向数组dx[ ]和dy[ ] 存储坐标(x,y)上、下、左、右 表示下一步能到的位置。如果越界或者下一步搜到字符'0'时就跳过。

每次搜索完时,如果f为1,就让ans1++,同时再将f置为0,便于以后的搜索。

3. 代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
const int N = 1e5+10;
int n, m;
ll ans, ans1;
string g[N];
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,-1,1 };
int f;void dfs(int x, int y) {if (g[x][y] >= '2' && g[x][y] <= '9') f = 1;g[x][y] = '0';for (int i = 0; i < 4; i++) {int nx = x + dx[i], ny = y + dy[i];if (nx<0 || nx>n - 1 || ny<0 || ny>m - 1) continue;if (g[nx][ny] == '0') continue;dfs(nx, ny);}return;
}int main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n >> m;for (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') {dfs(i, j);ans++;}if (f) {ans1++;f = 0;}}}cout << ans << " " << ans1 << endl;return 0;
}

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

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

相关文章

Golang 异步(bsd/linux)io

Golang 异步(bsd/linux)io 在日常开发中&#xff0c;读写文件的底层调用函数是syscall.Read/Write。一切都是围绕这两个函数展开的&#xff0c;不过有时候需要或者就是单纯想异步执行。liburing是linux上一个很好的原生异步io库&#xff0c;这里需要适配bsd派系的系统&#xf…

vue 中 清除form 校验状态

1 resetFields()&#xff1b;清除全部校验状态数据 this.$refs.form.resetFields(); 2 resetFields() &#xff1b;清除form的全部校验状态 this.$refs.form.clearValidate(); 3&#xff0c;清除固定的字段的校验 const field supplierName; // 要清除校验的字段名 cons…

iostream、fstream、sstream、string、vector、unordered_map、stack

iostream 用于输入输出操作&#xff0c;包含了处理标准输入输出流的功能&#xff08;例如&#xff0c;cin, cout, cerr等&#xff09;。 #include <iostream>int main() {int number;std::cout << "Enter a number: ";std::cin >> number;std::…

像uniapp image标签一样对图片进行缩放和裁剪

像uniapp image标签一样对图片进行缩放和裁剪 0 前言提示1 实现1.1 不保持纵横比缩放图片&#xff0c;使图片的宽高完全拉伸至填满 image 元素1.2 保持纵横比缩放图片&#xff0c;使图片的长边能完全显示出来。也就是说&#xff0c;可以完整地将图片显示出来。1.3 保持纵横比缩…

【DevOps实战篇】使用Portainer启动WordPress CMS堆栈应用

【DevOps实战篇】使用Portainer启动WordPress CMS堆栈应用 目录 【DevOps实战篇】使用Portainer启动WordPress CMS堆栈应用使用 Portainer 安装 WordPress 的要求什么是 Portainer使用 Portainer 安装 WordPress 的理由步骤1: 如何为 WordPress 设置 Portainer步骤2: 如何访问 …

Amuse .NET application for stable diffusion

Amuse github地址&#xff1a;https://github.com/tianleiwu/Amuse .NET application for stable diffusion, Leveraging OnnxStack, Amuse seamlessly integrates many StableDiffusion capabilities all within the .NET eco-system Welcome to Amuse! Amuse is a profes…

uni-app 中两个系统各自显示不同的tabBar

最近在一个uni-app项目中遇到一个需求,在登录页面成功登录以后需要判断身份,不同的身份的进入不同的tabBar页面,但是在uni-app项目中pages.json中的tabBar的list数组只有一个&#xff0c;且不能写成动态的,那如何实现这个需求呢?答案是需要我们自定义tabBar。 目录 1、我们确…

vue+elementUI实现树形穿梭框

1.实现效果 2.整体思路 将左侧选中的节点移动到右侧&#xff0c;还要保持树结构&#xff0c;意味着移动子节点&#xff0c;需要把该子节点对应的父节点甚至父节点的父节点一并移到右侧形成一个新的树结构&#xff0c;树结构的层级和原来的树保持一致&#xff0c;只是右侧展示…

QML 绘制PieSeries(饼状图)

一.PieSeries(饼状图)介绍 在QML中绘制饼状图主要依赖于Qt提供的QtCharts模块。该模块包含了一系列用于绘制图表的类&#xff0c;其中PieSeries类专门用于创建饼状图。 以下是一些关于使用QtCharts在QML中绘制饼状图的介绍&#xff1a; PieSeries属性&#xff1a;PieSeries是绘…

Sora后时代文生视频的探索

一、写在前面 按常理&#xff0c;这里应该长篇大论地介绍一下Sora发布对各行业各方面产生的影响。不过&#xff0c;这类文章已经很多了&#xff0c;我们今天主要聊聊那些已经成熟的解决方案、那些已经可以“信手拈来”的成果&#xff0c;并以此为基础&#xff0c;看看Sora发布…

练习实践-TLS协议01-Wireshark对https数据的解密

参考来源&#xff1a; https://zhuanlan.zhihu.com/p/36669377 https://blog.csdn.net/u010726042/article/details/53408077 思路&#xff1a; wireshark抓到的https流量包经过了ssl加密&#xff0c;那么我们如何才能查看解密的数据呢&#xff1f;Firefox和Chrome浏览器都支…

ubuntu显卡驱动安装

最近电脑显示器频繁出现故障导致显卡驱动总是出问题&#xff0c;找到了一套简单、有效的显卡驱动安装方式&#xff0c;记录一下方便下次出问题时候用。 参考了以下文章&#xff1a; Ubuntu18-22.04安装和干净卸载nvidia显卡驱动——超详细、最简单 Ubuntu 安装显卡驱动 显卡驱…

C++ 网络编程学习七

C 网络编程学习七 asio实现http服务器 asio实现http服务器 客户端实现&#xff1a; 发送&#xff1a;io_context上下文server&#xff1a;服务器地址path&#xff1a;请求路径resolver_&#xff1a;tcp resolver&#xff0c;输入的不是一个域名的时候&#xff0c;解析出来。s…

海外云手机如何帮助亚马逊引流?

随着全球化的推进&#xff0c;出海企业和B2B外贸企业越来越注重海外市场的开拓&#xff0c;这已成为企业争夺市场份额的重要策略。本文将重点探讨海外云手机在优化亚马逊店铺引流方面的作用和优势。 海外云手机是一种在云端运行的虚拟手机&#xff0c;能够在单一芯片上多开几个…

python爬虫基础实验:通过DBLP数据库获取数据挖掘顶会KDD在2023年的论文收录和相关作者信息

Task1 读取网站主页整个页面的 html 内容并解码为文本串&#xff08;可使用urllib.request的相应方法&#xff09;&#xff0c;将其以UTF-8编码格式写入page.txt文件。 Code1 import urllib.requestwith urllib.request.urlopen(https://dblp.dagstuhl.de/db/conf/kdd/kdd202…

PyTorch 深度学习(GPT 重译)(二)

四、使用张量表示真实世界数据 本章内容包括 将现实世界的数据表示为 PyTorch 张量 处理各种数据类型 从文件加载数据 将数据转换为张量 塑造张量&#xff0c;使其可以作为神经网络模型的输入 在上一章中&#xff0c;我们了解到张量是 PyTorch 中数据的构建块。神经网络…

Excel使用VLOOKUP函数

VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) 释义&#xff1a; lookup_value&#xff1a;要查找的值&#xff0c;包括数字&#xff0c;文本等 table_array&#xff1a;要查找的值以及预期返回的内容所在的区域 col_index_num&#xff1a;查找的区域的列…

微信小程序订阅消息(一次性订阅消息)

1、准备工作 登录微信公众平台–>订阅消息–>在公共模板库中选中一个模版–>将模版id复制&#xff0c;前后端都需要。 点击详情–>查看详细内容模版 复制给后端 2、相关api的使用 前端使用&#xff1a;wx.requestSubscribeMessage wx.openSetting wx.getSetti…

Gateway新一代网关

Gateway新一代网关 1、概述 ​ Cloud全家桶中有个很重要的组件就是网关&#xff0c;在1.x版本中都是采用的Zuul网关&#xff1b; ​ 但在2.x版本中&#xff0c;zuul的升级一直跳票&#xff0c;SpringCloud最后自己研发了一个网关SpringCloud Gateway替代Zuul。 ​ 官网&…

Rust构建高性能爬虫程序

一、概述 大数据时代得开启&#xff0c;数据分析的重要性日益增加&#xff0c;网页爬虫在信息收集、数据分析等领域发挥着重要作用。Rust&#xff0c;以其卓越的性能和内存安全性著称&#xff0c;非常适合构建高性能和高效率的爬虫程序。本文将详细介绍如何使用 Rust 构建高性…