14届蓝桥杯 C/C++ B组 T6 岛屿个数 (BFS,FloodFill,填色)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
首先拿到这道题不要想着去直接判断环里面的岛屿,这样太困难了,我们可以使用之前做过的题的经验,在输入加入一圈海水,然后从(0,0)点开始BFS,这里进行八向搜索,搜到的0全部都染色成2,假如2能够蔓延到岛屿的周围,就说明这个岛屿不在环里面,因为从外面无法蔓延到环里面。

在经历了染色过程之后我们就可以直接BFS搜索岛屿了,搜到任何被2围绕的岛屿就让答案加1。

代码:

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N = 55;
const int dx[4] = { 1,0,-1,0 };
const int dy[4] = { 0,1,0,-1 };
const int ddx[8] = { 1,1,0,0,-1,-1,1,-1 };
const int ddy[8] = { 1,-1,1,-1,1,-1,0,0 };char g[N][N];
int n, m;
bool vis[N][N];
int res = 0;void bfs(int ix, int iy, int st) {bool flag = 0;  //标记周围是否有2queue<pair<int, int>>q;q.push({ ix,iy });vis[ix][iy] = 1;while (q.size()) {auto t = q.front(); q.pop();if (st == 1) {  //这里是搜索岛屿的过程for (int i = 0; i < 4; i++) {int x = t.first + dx[i], y = t.second + dy[i];if (x >= 1 && x <= n && y >= 1 && y <= m && !vis[x][y]) {if (g[x][y] == '2')flag = 1;if (g[x][y] == '1') {q.push({ x,y });vis[x][y] = 1;}}}}else {          //这里是搜索外围海洋的过程for (int i = 0; i < 8; i++) {int x = t.first + ddx[i], y = t.second + ddy[i];if (x >= 0 && x <= n + 1 && y >= 0 && y <= m + 1 && !vis[x][y] && g[x][y] == '0') {q.push({ x,y });g[x][y] = '2';vis[x][y] = 1;}}}}if (flag)res++; //如果不在环里面,答案加1
}int main() {int t; cin >> t;while (t--) {memset(vis, 0, sizeof vis); //初始化memset(g, '0', sizeof g);cin >> n >> m;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> g[i][j];}}bfs(0, 0, 2);memset(vis, 0, sizeof vis); //搜完一遍海洋之后也要初始化res = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (g[i][j] == '1' && !vis[i][j]) {bfs(i, j, 1);}}}cout << res << endl;}return 0;
}

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

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

相关文章

Vue项目打包配置生产环境去掉console.log语句的方法

一、Vue2项目 使用webpack内置的 terser 工具&#xff0c;在vue.config.js文件加上相应的配置即可。 二、Vue3项目 同样是使用 terser 工具&#xff0c;不过vite没有内置terser&#xff0c;需要手动安装依赖 安装完后在vite.config.js文件加上相应的配置即可。 2024-4-9

日本韩国海外网红达人合作:共创TikTok与YouTube双赢营销格局

【本篇由言同数字科技有限公司原创】日韩地区拥有庞大的互联网用户群体&#xff0c;其中TikTok和YouTube作为两大主流平台&#xff0c;吸引了大量的用户和网红。随着直播带货在全球范围内的兴起&#xff0c;日韩地区的网红们也开始积极参与直播带货&#xff0c;将其作为一种新的…

如何使用pandoc转word和正确的参考文献格式

如何使用pandoc转word和正确的参考文献格式 latex转word参考文献样式 .csl 文件获取方法&#xff1a; bib转ris 在线转换导入endnote文献管理工具 latex转word 在cmd中转到latex文件所在目录&#xff0c;运行&#xff1a; pandoc sn-article.tex -o output_1.docx -w docx --…

VRRP——虚拟路由冗余协议

什么是VRRP 虚拟路由冗余协议VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09;是一种用于提高网络可靠性的容错协议。 通过VRRP&#xff0c;可以在主机的下一跳设备出现故障时&#xff0c;及时将业务切换到备份设备&#xff0c;从而保障网络通信的连续性和可…

研华UNO-3082-BTO工控机维修Advantech工业计算机主机深圳捷达工控维修

Intel Core™ 2 双核自动化计算机 带双 DVI、2 x PCI 和 FireWire Intel Core™ 2 双核自动化计算机 带双 DVI、1 x PCIe、3 x PCI 和 FireWire 板载 Intel Core 2 Duo L7500 1.6 GHz 处理器 双 DVI-I 支持最多 3 个显示器 用于视觉检测设备的双 IEEE-1394 通过跳线选择 AT/AT…

php其他反序列化知识学习

简单总结一下最近学习的&#xff0c;php其他的一些反序列化知识 phar soap session 其他 __wakeup绕过gc绕过异常非公有属性&#xff0c;类名大小写不敏感正则匹配&#xff0c;十六进制绕过关键字检测原生类的利用 phar 基础知识 在 之前学习的反序列化利用中&#xff0…

kvm虚拟机磁盘镜像加密

一、qcow2的aes加密 低版本的qemu能够支持对qcow2文件进行aes加密的方式&#xff0c;例如对一个已经存在的磁盘文件test.qcow2&#xff0c;可以将其转换为经过加密的qcow2文件。 qemu-img convert -O qcow2 --object secret,idsec0,data123456 -o encryptionon,encrypt.key-s…

(学习日记)2024.04.18:UCOSIII第四十六节:CPU利用率及栈检测统计

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

SQL explain 显示子查询A类型为ALL怎么优化

当 SQL EXPLAIN 显示子查询 A 的类型为 ALL 时&#xff0c;这意味着数据库系统正在执行全表扫描&#xff0c;而不是使用索引来执行子查询。全表扫描可能会导致性能下降&#xff0c;特别是在大型表上。 为了优化这种情况&#xff0c;您可以考虑以下几点&#xff1a; 1. **索引…

【Linux学习笔记】安卓运行C可执行文件No such file or directory

文章目录 开发环境运行失败现象解决办法方法一&#xff1a;使用静态库方法二&#xff1a;使用动态库创建lib查找依赖库复制需要注意的事情 开发环境 开发板&#xff1a;正点原子RK3568开发板安卓版本&#xff1a;11可执行程序命名&#xff1a;ledApp需加载模块&#xff1a;dts…

Redis的过期策略与内存淘汰机制原理及实践

Redis作为高性能的键值存储系统&#xff0c;其对数据过期与内存管理的设计直接影响到系统的性能与资源利用率。本文将以生动的比喻、通俗的语言&#xff0c;深入剖析Redis的过期策略与内存淘汰原理&#xff0c;助您全面理解数据在Redis中的生命周期管理艺术。 一、Redis过期策…

在线程间共享数据---互斥量

在线程间共享数据—互斥量 std::mutex std::mutex 是C标准库中 <mutex> 头文件中定义的一个类&#xff0c;它是实现多线程同步的基础工具&#xff0c;主要用于保护共享资源&#xff0c;防止多个线程同时访问同一资源造成的数据竞争&#xff08;race condition&#xff0…

Ubuntu安装配置FTP

1、安装服务端 sudo apt-get install vsftpd service vsftpd start service vsftpd stop service vsftpd restart 2、创建目录、用户 mkdir -p /home/xxxx sudo useradd -g ftp -d /home/vsftp -m angler 命令一&#xff1a;这种命令会在登录界面显示用户名 sudo …

vue3大事件项目3

弹框验证 先准备变量: const formModel ref({ cate_name: , cate_alias: }) 还有规则&#xff1a; const rules { cate_name: [ { required: true, message: please input name, trigger: blur }, { pattern: /^\S{1,10}$/, message: must be 1-10, trigger: blur } ], …

Java 基于微信小程序的智能停车场管理小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Rust腐蚀服务器常用参数设定详解

Rust腐蚀服务器常用参数设定详解 大家好我是艾西&#xff0c;一个做服务器租用的网络架构师上期我们分享了rust腐蚀服务器的windows系统搭建方式&#xff0c;其中启动服务器bat参数因为涉及的东西比较多所以想通过这篇文章给大家做一下详细的分享。 &#xff08;注本文中xxxx…

浅述.Net中的Hash算法(顺带对称、非对称算法)

【写在前面】 对称加密算法(只有一个私钥&#xff0c;比如DES【不推荐】、AES)&#xff1b; 非对称加密算法&#xff08;公钥与私钥&#xff0c;比如RSA&#xff09;&#xff1b; Hash算法也称为散列函数算法&#xff0c;任意长度的数据都转换为固定长度的字符串&#xff08…

【自然语言处理八-transformer实现翻译任务-一(输入)】

自然语言处理八-transformer实现翻译任务-一&#xff08;输入&#xff09; transformer架构数据处理部分模型的输入数据(图中inputs outputs outputs_probilities对应的label)以处理英中翻译数据集为例的代码 positional encoding 位置嵌入代码 鉴于transfomer的重要性&#xf…

小猫爬山(c++题解)

题目描述 Freda和rainbow饲养了N只小猫&#xff0c;这天&#xff0c;小猫们要去爬山。经历了千辛万苦&#xff0c;小猫们终于爬上了山顶&#xff0c;但是疲倦的它们再也不想徒步走下山了&#xff08;呜咕>_<&#xff09;。 Freda和rainbow只好花钱让它们坐索道下山。索…

1.汉诺塔问题

C力扣 汉诺塔 class Solution { public:void hanota(vector<int>& a, vector<int>& b, vector<int>& c) {dfs(a,b,c,a.size());}void dfs(vector<int>& a, vector<int>& b, vector<int>& c,int n){if(n1){c.push…