41.岛屿数量(第四期模拟笔试)(BFS练习题)

题目:

给定一个 m 行 n 列的二维地图,初始化每个单元格都是海洋,二维地图外也全是海洋。 

操作 addLand 会将单元格(col, row)变为陆地。

定义一系列相连的被海洋包围的陆地为岛屿,

横向相邻或者纵向相连的岛屿才算相连(斜着相邻的不算)。 

现有一系列的 addLand 操作,给出每次 addLand 操作后岛屿的个数。

样例:

输入
3
3
4
0 0
0 1
1 2
2 1

输出
1 1 2 3

思路:

        根据题意,我们是要找到 连通块有多少个,就是多少个岛屿。

由于数据范围较小,所以我们可以使用 BFS 搜索,每一次放生成大陆后直接暴力查找连通块输出即可,而 非法坐标的情况,我们可以直接忽略。

代码详解如下:

#include <iostream>
#include <queue>
#include <cstring>
#define endl '\n'
#define x first
#define y second
#define mk make_pair
#define YES puts("YES")
#define NO puts("NO")
#pragma GCC optimize(3,"Ofast","inline")
#define ___G std::ios::sync_with_stdio(false),cin.tie(0), cout.tie(0)
using namespace std;
const int N = 500;using PII = pair<int,int>;// 控制查找的时候走动的方向
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};int n,m;	// 地图大小
bool g[N][N];	// 地图内容
bool vis[N][N];	// 查找的时候标记是否查找过
int k;	// 操作数int ans;	// ans 是检查岛屿结果// 查找走动方向
inline bool isRun(int x,int y)
{return (x >= 0 && x < n && y >= 0 && y < m && !vis[x][y] && g[x][y]);
}inline void BFS(int x,int y)
{// 存储检查坐标queue<PII>q;q.push(mk(x,y));while(q.size()){// 取出当前坐标auto now = q.front();q.pop();// 标记已检查大陆坐标vis[now.x][now.y] = true;// 开始尝试往上下左右四个方向// 寻找大陆所形成的岛屿for(int i = 0;i < 4;++i){// 取出下一步检查的坐标int bx = now.x + dx[i];int by = now.y + dy[i];// 判断是否符合检查走动的条件if(isRun(bx,by)){// 符合则开始标记vis[bx][by] = true;// 列入下一步检查点q.push(mk(bx,by));}			}	}return ;
}inline void solve()
{// 控制输出格式bool st = false;cin >> n >> m >> k;while(k--){// 开始放置大陆int x,y;cin >> x >> y;// 控制的空格输出格式if(st) putchar(' ');// 如果坐标合法,那么开始放置大陆if(x >= 0 && x < n && y >= 0 && y < m){// 每次放置大陆的时候,我们都要重新// BFS 一遍查找连通块,所以这里要初始化标记ans = 0;memset(vis,false,sizeof vis);// 放置大陆g[x][y] = true;for(int i = 0;i < n;++i){for(int j = 0;j < m;++j){// 如果该大陆没被检查过if(!vis[i][j] && g[i][j]){// 累加岛屿++ans;// 开始检查BFS(i,j);}}}		// 输出岛屿数量结果cout << ans;}else{// 如果做标是非法情况,那么我们直接输出上一次的检查结果cout << ans;}// 控制输出格式st = true;}	
}int main()
{
//	freopen("a.txt", "r", stdin);
//	___G;int _t = 1;
//	cin >> _t;while (_t--){solve();}return 0;
}

最后提交:

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

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

相关文章

多线程下的signal信号处理

多线程中&#xff0c;信号在哪个线程中处理是不确定的&#xff0c;可能被任意一个线程处理 下边的代码可以验证该结论&#xff0c;多次Ctrlc&#xff0c;会被不同的线程捕获此信号&#xff0c;并处理&#xff0c;最终每个线程死锁&#xff0c;阻塞在等待锁的状态 #include &l…

微信小程序请求接口返回的二维码(图片),本地工具和真机测试都能显示,上线之后不显示问题

请求后端接口返回的图片&#xff1a; 页面展示&#xff1a; 代码实现&#xff1a; :show-menu-by-longpress"true" 是长按保存图片 base64Code 是转为base64的地址 <image class"code" :src"base64Code" alt"" :show-menu-by-long…

2023-09-02力扣每日一题

链接&#xff1a; 2511. 最多可以摧毁的敌人城堡数目 题意和解&#xff1a; 阅读理解题&#xff0c;要从1到-1或-1到1&#xff0c;中间只能有0&#xff0c;求最多能有多少0 实际代码&#xff1a; #include<bits/stdc.h> using namespace std; int captureForts(vect…

C#--sugarClient使用之ColumnName

使用Sugar ORM框架可以很方便地实现表名和实体名的映射&#xff0c;可以按照以下步骤进行操作&#xff1a; 创建一个实体类&#xff0c;定义实体的属性及其他信息。 [SugarTable("user_info")] // 指定实体对应的表名 public class User {public int Id { get; set…

Three.js实现模型,模型材质可拖拽效果 DragControls

Three.js提供了一个拖拽的API DragControls 用于实现模型材质拖拽效果 DragControls&#xff1a;是一个用于在Three.js中实现拖拽控制的辅助类。它简化了在Three.js中实现拖拽物体的过程。 DragControls的构造函数接受三个参数&#xff1a; objects&#xff1a;一个包含需要…

java中用HSSFWorkbook生成xls格式的excel(亲测)

SXSSFWorkbook类是用于生成XLSX格式的Excel文件&#xff08;基于XML格式&#xff09;&#xff0c;而不是XLS格式的Excel文件&#xff08;基于二进制格式&#xff09;。 如果你需要生成XLS格式的Excel文件&#xff0c;可以使用HSSFWorkbook类。以下是一个简单的示例&#xff1a…

C# textBox 右键菜单 contextMenuStrip

需求&#xff1a; 想在上图空白处可以右键弹出菜单&#xff0c;该怎么做呢&#xff1f; 1.首先&#xff0c;拖出一个 ContextMenuStrip。 随便放哪里都行&#xff0c;如下: 2.在textBox里关联这个“右键控件”即可&#xff0c;如下&#xff1a; 最终效果如下&#xff1a; 以上…

HTML <th> 标签

实例 普通的 HTML 表格,包含两行两列: <table border="1"><tr><th>Company</th><th>Address</th></tr><tr><td>Apple, Inc.</td><td>1 Infinite Loop Cupertino, CA 95014</td></tr…

自定义类型:结构体、枚举、联合

目录 结构体 结构体的基础知识 结构的声明 特殊的声明 结构体的自引用 结构体变量的定义和初始化 结构体内存对齐 修改默认对齐数 结构体传参 位段 什么是位段 位段的内存分配 位段的跨平台问题 位段的应用 枚举 枚举类型的定义 枚举的优点 联合体&#xff08;共…

算法题打卡day51-股票问题 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

309.最佳买卖股票含冷冻期 状态&#xff1a;Debug后AC 需要添加一个冷冻期状态和一个表示冷冻期状态的今天卖出不持有状态。代码如下&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int len prices.size();vector<vector<int&g…

编写中间件以用于 Express 应用程序

概述 中间件函数能够访问请求对象 (req)、响应对象 (res) 以及应用程序的请求/响应循环中的下一个中间件函数。下一个中间件函数通常由名为 next 的变量来表示。 中间件函数可以执行以下任务&#xff1a; 执行任何代码。对请求和响应对象进行更改。结束请求/响应循环。调用堆…

thinkphp 使用 easypay 和 easywechat

easypay 是3.x easywechat 是6.x 引入&#xff1a; use Yansongda\Pay\Pay;//easypayuse EasyWeChat\MiniApp\Application as MiniApp;//easywechat use EasyWeChat\Pay\Application as Payapp;//easywechat public function suborder(){$order [out_trade_no > time(…

JS 常用方法汇总

本篇目录 Math字符串数组JSON日期(Date)字符数字URL其他 Math Math.max()&#xff1a;用于返回指定参数中的最大值。Math.min()&#xff1a;用于返回指定参数中的最小值。Math.random()&#xff1a;用于生成一个介于 0 到 1 之间的随机数。Math.floor()&#xff1a;用于将一个…

Zabbix Api监控项值推送:zabbix_sender

用法示例&#xff1a; zabbix_sender [-v] -z server [-p port] [-I IP-address] [-t timeout] -s host -k key -o value其中&#xff1a; -z 即 --zabbix-server&#xff0c;Zabbix server的主机名或IP地址。如果主机由proxy监控&#xff0c;则应使用proxy的主机名或IP地址-…

Java“牵手”1688图片识别商品接口数据,图片地址识别商品接口,图片识别相似商品接口,1688API申请指南

1688商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要通过图片地址识别获取1688商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问1688商城的网页来获取商品详情信息。以下是两种常…

前端面试准备学习记录 — CSS篇

2.1、CSS基础 选择器&#xff1a;id > 类 属性 伪类 > 标签 优先级&#xff1a;内联样式 > id > 类、伪类、属性 > 标签 !important优先级最高 block&#xff1a;独占一行&#xff1b;inline&#xff1a;width、height属性无效&#xff0c;水平方向的margin和…

iperf 测试网络性能

Iperf 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能&#xff0c;具有多种参数和UDP特性&#xff0c;可以根据需要调整&#xff0c;可以报告带宽、延迟抖动和数据包丢失。 官网&#xff1a;iperf.fr https://iperf.fr 支持参数 参数说明-p, --port #Server 端监…

超图嵌入论文阅读1:对偶机制非均匀超网络嵌入

超图嵌入论文阅读1&#xff1a;对偶机制非均匀超网络嵌入 原文&#xff1a;Nonuniform Hyper-Network Embedding with Dual Mechanism ——TOIS&#xff08;一区 CCF-A&#xff09; 背景 超边&#xff1a;每条边可以连接不确定数量的顶点 我们关注超网络的两个属性&#xff1…

排序算法学习

总体概况 参考自&#xff1a;https://github.com/hustcc/JS-Sorting-Algorithm 排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c…

《Web安全基础》04. 文件上传漏洞

web 1&#xff1a;文件上传漏洞2&#xff1a;WAF 绕过2.1&#xff1a;数据溢出2.2&#xff1a;符号变异2.3&#xff1a;数据截断2.4&#xff1a;重复数据 本系列侧重方法论&#xff0c;各工具只是实现目标的载体。 命令与工具只做简单介绍&#xff0c;其使用另见《安全工具录》…