当前位置: 首页 > news >正文

【岛屿个数——BFS / DFS,“外海”】

题目

推荐阅读

AcWing 4959. 岛屿个数(两种解法,通俗解释) - AcWing

1.岛屿个数 - 蓝桥云课 (lanqiao.cn)

代码

#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
int dx4[4] = {-1, 0, 1, 0}, dy4[4] = {0, 1, 0, -1};
int dx8[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
int dy8[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
using PII = pair<int, int>;
const int N = 55;
char g[N][N];
int cnt, m, n;
void bfs_os(int i, int j) // bfs for outer sea, change 0 to 2
{queue<PII> q;g[i][j] = 2;q.push({i, j});while (q.size()){auto u = q.front();q.pop();int x = u.x, y = u.y;for (int i = 0; i < 8; i++){int nx = x + dx8[i];int ny = y + dy8[i];if (nx < 0 || nx > m + 1 || ny < 0 || ny > n + 1 || g[nx][ny])continue;g[nx][ny] = 2; //压入之前改标记,提升速度q.push({nx, ny});}}
}
void bfs_is(int i, int j) // bfs for island, change 1 to 0
{cnt++;queue<PII> q;g[i][j] = 0;q.push({i, j});while (q.size()){auto u = q.front();q.pop();int x = u.x, y = u.y;for (int i = 0; i < 4; i++){int nx = x + dx4[i];int ny = y + dy4[i];if (nx < 1 || nx > m || ny < 1 || ny > n || g[nx][ny] != 1)continue;g[nx][ny] = 0;q.push({nx, ny});}}
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);int t;cin >> t;while (t--){cnt = 0;memset(g, 0, sizeof g);cin >> m >> n;for (int i = 1; i <= m; i++)for (int j = 1; j <= n; j++)cin >> g[i][j], g[i][j] -= '0';bfs_os(0, 0);for (int i = 1; i <= m; i++){for (int j = 1; j <= n; j++){if (g[i][j] == 1 && g[i-1][j] == 2)bfs_is(i, j);}}cout << cnt << '\n';}
}

http://www.lryc.cn/news/527922.html

相关文章:

  • MySQL常用数据类型和表的操作
  • 2025_1_27 C语言内存,递归,汉诺塔问题
  • 开源音乐管理软件Melody
  • Nginx开发01:基础配置
  • 【TCP 协议】确认应答机制 超时重传 三次握手 四次挥手
  • jenkins-k8s pod方式动态生成slave节点
  • 基于vue和elementui的简易课表
  • 可用的IPv6公共DNS(2025年1月更新)
  • c高级复习
  • 电子信息工程专业主要研究哪一方面东西?
  • RU 19.26安装(手工安装各个补丁)
  • 深入理解Pytest中的Setup和Teardown
  • 如何利用AI工具来进行数据分析
  • 具身智能体俯视全局的导航策略!TopV-Nav: 解锁多模态语言模型在零样本目标导航中的顶视空间推理潜力
  • npm:升级自身时报错:EBADENGINE
  • 微信小程序实现自定义日历功能
  • Vue 3 中的 toRef 与 toRefs:使用与案例解析
  • 问题修复记录:Linux docker 部署 dify,无法调用宿主机本地服务
  • 代码随想录day20
  • 【ProxyBroker】用Python打破网络限制的利器
  • 分布式微服务系统架构第88集:kafka集群
  • RocketMQ原理—5.高可用+高并发+高性能架构
  • 下载Visual Studio Community 2019
  • 一文简单回顾Java中的String、StringBuilder、StringBuffer
  • 27. C语言 强制类型转换详解
  • git困扰的问题
  • 反向代理模块。。
  • 【Linux基础指令】第三期
  • Jenkins安装部署(以及常见报错解决方案),jdk版本控制器sdkman
  • 利用JSON数据类型优化关系型数据库设计