L2-4 寻宝图

server/2025/2/26 19:39:46/

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

输入格式:

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

 

#include <bits/stdc++.h>
using namespace std;const int dx[] = {-1, 1, 0, 0};
const int dy[] = {0, 0, -1, 1};void bfs(int x, int y, vector<vector<char>>& grid, bool& hasTreasure) {int n = grid.size();int m = grid[0].size();queue<pair<int, int>> q;q.push({x, y});// 标记当前格子为已访问grid[x][y] = '0';while (!q.empty()) {auto [cx, cy] = q.front();q.pop();// 检查当前格子是否是宝藏if (grid[cx][cy] >= '2' && grid[cx][cy] <= '9') {hasTreasure = true;}// 遍历四个方向for (int i = 0; i < 4; i++) {int nx = cx + dx[i];int ny = cy + dy[i];if (nx >= 0 && nx < n && ny >= 0 && ny < m && grid[nx][ny] != '0') {grid[nx][ny] = '0'; // 标记为已访问q.push({nx, ny});}}}
}void solve() {int n, m;cin >> n >> m;vector<vector<char>> grid(n, vector<char>(m));// 读取地图for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {cin >> grid[i][j];}}int totalIslands = 0;int treasureIslands = 0;// 遍历地图for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (grid[i][j] != '0') {bool hasTreasure = false;bfs(i, j, grid, hasTreasure);totalIslands++;if (hasTreasure) {treasureIslands++;}}}}// 输出结果cout << totalIslands << " " << treasureIslands << endl;
}int main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);solve();return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int dx[] = {-1, 1, 0, 0};
const int dy[] = {0, 0, -1, 1};
void dfs(int x, int y, vector<vector<char>>& grid, bool& hasTreasure) {int n = grid.size();int m = grid[0].size();if (grid[x][y] >= '2' && grid[x][y] <= '9') {hasTreasure = true;}grid[x][y] = '0';for (int i = 0; i < 4; i++) {int nx = x + dx[i];int ny = y + dy[i];if (nx >= 0 && nx < n && ny >= 0 && ny < m && grid[nx][ny] != '0') {dfs(nx, ny, grid, hasTreasure);}}
}
void solve() {int n, m;cin >> n >> m;vector<vector<char>> grid(n, vector<char>(m));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {cin >> grid[i][j];}}int totalIslands = 0;int treasureIslands = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (grid[i][j] != '0') {bool hasTreasure = false;dfs(i, j, grid, hasTreasure);totalIslands++;if (hasTreasure) {treasureIslands++;}}}}cout << totalIslands << " " << treasureIslands << endl;
}int main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);solve();return 0;
}

 


http://www.ppmy.cn/server/170830.html

相关文章

网络安全风险评估

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 概述 H3 风险分析原理 风险分析是风险评估的核心部分&#xff0c;是定量或定性计算安全风险的过程 风险分析中要涉及资产、威胁、脆弱性三个基本要素。 资产的属…

组合优化问题的机器学习研究——以图匹配问题为例

【OR Talk NO.17 | 组合优化问题的机器学习研究——以图匹配问题为例】https://www.bilibili.com/video/BV1Zf4y1S7Zr?vd_source7c2b5de7032bf3907543a7675013ce3a 定义&#xff1a; 什么是图匹配&#xff1f; 在三个图片上提取点&#xff0c;包括内点、外点、噪声点&#x…

Git 分支操作

Git 分支的 CRUD 操作 增&#xff1a;切换远程分支到本地 直接将远程分支检出为本地的一个分支并切换到该分支git checkout [远程分支名称] 新建一个本地分支并关联到远程分支上 -b 命令&#xff1a;git checkout -b [本地分支名称] origin/[远程分支名称] &#xff08;必须…

多线程进阶 : 八股文面试题 一 [Java EE 多线程 锁和死锁相关问题]

目录 锁策略: 1. 乐观锁 vs 悲观锁 2. 轻量级锁 vs 重量级锁 3. 自旋锁 vs 挂起等待锁 4. 公平锁 vs 非公平锁 5. 可重入锁 vs 不可重入锁 6. 读写锁 vs 互斥锁 Java中 synchronized 内部实现策略 (内部原理) Java中的synchronized具体采用了哪些锁策略呢? 死锁相关 …

Axios 取消请求

如果是react项目&#xff0c;推荐ahooks 如果是vue项目,推荐ahooks-vue 但如果用的是纯axios, 想要取消请求的话&#xff0c;可以这样 axios文档 request.js// 存放请求的key和取消请求的方法 const reqMap new Map()// 创建实例 const instance axios.create({baseURL: …

【leetcode hot 100 49】字母异位词分组

一、错误思路&#xff1a;在判断是否str[i]的每一个字母都存在于str[j]中 class Solution {public List<List<String>> groupAnagrams(String[] strs) {List list new ArrayList();Map<Integer,Integer> map new HashMap(); // 用map存放记录已经查找到的…

进程间通信中间件---ZeroMQ

ZeroMQ&#xff08;也称为 MQ 或 0MQ&#xff09;是一个高性能的异步消息传递库&#xff0c;专为分布式或并发应用程序设计。它提供了多种通信模式&#xff08;如请求-响应、发布-订阅等&#xff09;&#xff0c;并且可以在多种传输协议&#xff08;如 TCP、IPC、PGM 等&#x…

加油站小程序实战教程02数据源设计

目录 一、引言二、需求分析三、表结构设计思路四、关键设计要点五、总结 一、引言 在移动互联网时代&#xff0c;小程序已成为连接用户与服务的重要桥梁。以加油小程序为例&#xff0c;其核心功能涉及地图定位、加油站展示、加油下单、钱包管理、优惠券、订单管理以及发票、车…