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

1113. 红与黑--Flood Fill 算法

目录

1113. 红与黑--Flood Fill 算法---宽搜(BFS)或DFS)

输入格式

输出格式

数据范围

输入样例:

输出样例:

思路:

1.BFS 思路:

2.DFS 思路

方法一:(BFS)代码:

方法二:深搜(DFS)代码:

运行结果:


1113. 红与黑--Flood Fill 算法---宽搜(BFS)或DFS)

有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。

你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。

请写一个程序,计算你总共能够到达多少块黑色的瓷砖。

输入格式

输入包括多个数据集合。

每个数据集合的第一行是两个整数 W 和 H,分别表示 x 方向和 y 方向瓷砖的数量。

在接下来的 HH 行中,每行包括 W 个字符。每个字符表示一块瓷砖的颜色,规则如下

1)‘.’:黑色的瓷砖;
2)‘#’:红色的瓷砖;
3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。

当在一行中读入的是两个零时,表示输入结束。

输出格式

对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。

数据范围

1≤W,H≤20

输入样例:
6 9 
....#. 
.....# 
...... 
...... 
...... 
...... 
...... 
#@...# 
.#..#. 
0 0
输出样例:
45
难度:简单
时/空限制:1s / 64MB
总通过数:31526
总尝试数:54082
来源:

《信息学奥赛一本通》

算法标签

DFSFlood Fill

思路:

1.BFS 思路:

偏移量:

2.DFS 思路

 

方法一:(BFS)代码:

#include <bits/stdc++.h>// 定义宏,便于快速访问 pair 类型中的元素
#define x first
#define y second// 引入标准命名空间
using namespace std;// 定义 pair 类型别名 PII,表示一对整数
typedef pair<int, int> PII;// 定义常量 N,表示矩阵的最大尺寸
const int N = 25;// 定义全局变量 g(存储矩阵)、n(矩阵行数)、m(矩阵列数)
char g[N][N];
int n, m;  // 矩阵行与列// 定义偏移量数组 dx 和 dy,用于计算相邻格子的坐标
int dx[4] = {-1, 0, 1, 0};  // 每个方向x方向的偏移量:上、右、下、左
int dy[4] = {0, 1, 0, -1};  // 每个方向y方向的偏移量:上、右、下、左// 广度优先搜索(BFS)函数,参数:起始位置的行坐标 sx 和列坐标 sy
// 返回值:从起始位置开始,能够搜索到的点(值为 '.') 的数量
int bfs(int sx, int sy) {queue<PII> q;  // 定义队列 q,用于存储待访问的格子坐标q.push({sx, sy});  // 将起始位置加入队列g[sx][sy] = '#';  // 将起始位置标记为 '#'int res = 0;  // 初始化搜索到的点的数量为 0// 当队列不为空时,持续进行广度优先搜索while (!q.empty()) {auto t = q.front();  // 取队首元素(当前待访问的格子坐标)q.pop();  // 出队,移除已访问的格子坐标res++;  // 计数器加一,表示找到一个可搜索的点// 遍历当前格子的四个相邻格子for (int i = 0; i < 4; i++) {int x = t.x + dx[i], y = t.y + dy[i];  // 计算相邻格子的坐标// 检查相邻格子是否在矩阵范围内、是否为 '.',若不符合条件则跳过if (x < 0 || x >= n || y < 0 || y >= m || g[x][y] != '.') continue;g[x][y] = '#';  // 将相邻格子标记为 '#',表示已访问q.push({x, y});  // 将相邻格子坐标加入队列,等待后续访问}}return res;  // 返回搜索到的点的数量
}int main() {// 循环读取多组测试数据,直到输入为 0 0while (cin >> m >> n, n || m) {// 读取当前矩阵数据for (int i = 0; i < n; i++) cin >> g[i];// 查找矩阵中 '@'(起始位置)的坐标int x, y;for (int i = 0; i < n; i++)for (int j = 0; j < m; j++)if (g[i][j] == '@') {x = i;y = j;}// 调用 BFS 函数,计算并输出能够搜索到的点的数量cout << bfs(x, y) << endl;}return 0;  // 主函数返回 0,表示程序正常结束
}

方法二:深搜(DFS)代码:

#include <bits/stdc++.h>using namespace std;// 定义全局变量 n(矩阵行数)、m(矩阵列数),以及矩阵 g
int n, m;
const int N = 25;
char g[N][N];// 定义偏移量数组 dx 和 dy,用于计算相邻格子的坐标
int dx[4] = {-1, 0, 1, 0};  // 水平方向的偏移量:左、中心、右、中心
int dy[4] = {0, 1, 0, -1};  // 垂直方向的偏移量:上、中心、下、中心// 深度优先搜索(DFS)函数,参数:当前格子的行坐标 x 和列坐标 y
// 返回值:以当前格子为根的连通区域中值为 '.' 的点的数量
int dfs(int x, int y) {int res = 1;  // 初始化结果为 1,表示当前格子本身是一个可搜索的点g[x][y] = '#';  // 将当前格子标记为 '#',表示已访问// 遍历当前格子的四个相邻格子for (int i = 0; i < 4; i++) {int a = x + dx[i];  // 计算相邻格子的行坐标int b = y + dy[i];  // 计算相邻格子的列坐标// 检查相邻格子是否在矩阵范围内、是否为 '.',若符合条件则递归搜索if (a >= 0 && a < n && b >= 0 && b < m && g[a][b] == '.')res += dfs(a, b);  // 将相邻格子的搜索结果累加到 res}return res;  // 返回以当前格子为根的连通区域中值为 '.' 的点的数量
}int main() {// 循环读取多组测试数据,直到输入为 0 0while (cin >> m >> n, n || m) {// 读取当前矩阵数据for (int i = 0; i < n; i++) cin >> g[i];// 查找矩阵中 '@'(起始位置)的坐标int x, y;for (int i = 0; i < n; i++)for (int j = 0; j < m; j++)if (g[i][j] == '@') {x = i;y = j;}// 调用 DFS 函数,计算并输出以起始位置为根的连通区域中值为 '.' 的点的数量cout << dfs(x, y) << endl;}return 0;  // 主函数返回 0,表示程序正常结束
}

         实现了一个简单的深度优先搜索(DFS)算法,用于在一个给定的矩阵中,从标记为 '@' 的起始位置开始,搜索并标记所有相邻且值为 '.' 的点。最终输出以起始位置为根的连通区域中值为 '.' 的点的数量。

运行结果:

 

相关文章:

1113. 红与黑--Flood Fill 算法

目录 1113. 红与黑--Flood Fill 算法---宽搜&#xff08;BFS&#xff09;或DFS&#xff09; 输入格式 输出格式 数据范围 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 1.BFS 思路&#xff1a; 2.DFS 思路 方法一&#xff1a;&#xff08;BFS&#x…...

深入Java中间件:编程设计精粹

个人主页&#xff1a; 进朱者赤 阿里非典型程序员一枚 &#xff0c;记录平平无奇程序员在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法&#xff08;公众号同名&#xff09; 引言 在Java中间件和框架里蕴藏着数不尽的编程设计精粹。这些设计不仅值得我们在日常编码…...

AUTOCAD输出或打印PDF文件时,如何将图形居中且布满图纸?

AUTOCAD输出或打印PDF文件时,如何将图形居中且布满图纸? 如下图所示,我们打开一份DWG格式的图纸文件,然后点击上方的“打印“图标, 如下图所示, 打印机/绘图仪这里选择“DWG To PDF“; 图纸尺寸:这里以普通的A4纸为例进行说明; 打印比例选择“布满图纸“; 打印偏移…...

unity socket udp 连接

使用此方法有助于udp在局域网内稳定的连接运行&#xff0c;已经过验证&#xff0c;为了保持彻底的稳定&#xff0c;可以考虑加入ping-pang进行网络处理&#xff0c;如果为了安全&#xff0c;请使用加密TCP 如果您要在大规&#xff0c;大项目的游戏中使用网络技术&#xff0c;建…...

【ensp】VLAN间通信的解决办法

目录 VLAN间通信简介 VLAN间通信的两种方式 借助三层设备路由器进行VLAN间的通信&#xff08;也就是单臂路由&#xff09; 在端口上创建子接口之后为什么需要开启arp广播&#xff0c;是因为他是子接口吗? 拓扑图 交换机配置 路由器配置 查看路由器配置 测试能否实现…...

接口测试框架搭建D22

整体架构和分层设计 run.py 运行测试用例&#xff0c;生成测试报告 test_cases/ 登录用例 注册用例 其他业务用例... data/ 测试数据 libs 第三方插件&#xff0c;比如HTMLTestRunnerNew config config.yaml 静态配置数据 config.py 动态配置数据 reports 测试报告…...

CASA模型教程

原文链接&#xff1a;CASA模型教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247600635&idx6&sna655a8de570edcaa435d6e917b66d9b3&chksmfa82081ccdf5810a33a778e8771bb116bde9e5a1f795daa4894e5b74de17b03ebe86d7cdcfe3&token1464653739&…...

算法思路-遥感语义分割与变化检测

遥感影像存在的问题 1.不同季节影像的差异 2. 影像云雾遮挡 3.影像由于传感器、地物反射、地物高度差等导致的畸变 抛开数据&#xff0c;目前语义分割任务面临的问题 1. 单一任务模型很难具有通用性 结合自然语言的大模型是否会是一个新的启发点 首先需要考虑根据影像我…...

动态规划专练( 231.打家劫舍Ⅱ)

231.打家劫舍Ⅱ 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间…...

K-means和逻辑回归

逻辑回归 一个事件的几率是该事件发生的概率/该事件不发生的概率&#xff1a;P/&#xff08;1-P&#xff09; 对数几率是&#xff1a;log(P/&#xff08;1-P&#xff09;) **考虑对输入x分类的模型&#xff1a;**log(P/&#xff08;1-P&#xff09;)wx 则 Pexp(wx)/(exp(w*x)…...

3.2 iHRM人力资源 - 组织架构 - 编辑及删除

iHRM人力资源 - 组织架构 文章目录 iHRM人力资源 - 组织架构一、编辑功能1.1 表单弹层并数据回显1.2 编辑校验1.3 编辑 二、删除功能 一、编辑功能 编辑功能和新增功能用的组件其实是一个&#xff0c;结构几乎是一样的&#xff0c;其实是复用了组件&#xff0c;我们也省去了很…...

支付系统核心逻辑 — — 状态机(JavaGolang版本)

支付系统核心逻辑 — — 状态机 代码地址&#xff1a;https://github.com/ziyifast/ziyifast-code_instruction/tree/main/state_machine_demo 1 概念&#xff1a;FSM&#xff08;有限状态机&#xff09;&#xff0c;模式之间转换 状态机&#xff0c;也叫有限状态机&#xff08…...

rest_framework_mongoengine实现后端的增删改查

rest_framework_mongoengine实现后端增删改查 ‍ 一、增删改查 1. 继承ModelViewSet实现增删改查 父urls.py path("api/testapp/", include("apps.testapp.urls")), # 测试子urls.py # -*- coding: utf-8 -*- from django.urls import path from res…...

【精读文献】Scientific data|2017-2021年中国10米玉米农田变化制图

论文名称&#xff1a;Mapping annual 10-m maize cropland changes in China during 2017–2021 第一作者及通讯作者&#xff1a;Xingang Li, Ying Qu 第一作者单位及通讯作者单位&#xff1a;北京师范大学地理学部 文章发表期刊&#xff1a;《Scientific data》&#xff08…...

高光谱图像修复笔记

目录 RetinexFormer 也有MST-plus-plus代码&#xff0c;分辨率可以调 MST-plus-plus github地址&#xff1a; WACV2023 DSTrans RetinexFormer GitHub - caiyuanhao1998/Retinexformer: "Retinexformer: One-stage Retinex-based Transformer for Low-light Image E…...

GPS定位原理及应用分析

一&#xff0e;定位原理 1.卫星定位&#xff08;GPS&#xff0c;北斗导航&#xff09; ①&#xff0e;硬件构成&#xff08;24颗卫星&#xff0c;可构建一套导航系统&#xff09; 为何是24颗卫星&#xff1f; 可以做到全球覆盖&#xff0c;同一地点地球上空可观测到4颗卫星。 …...

Java面试篇9——并发编程

并发编程知识梳理 提示&#xff0c;此仅为面试&#xff0c;若想对线程有跟完整了解&#xff0c;请点击这里 提示&#xff1a;直接翻到最后面看面试真题&#xff0c;上面的为详解 面试考点 文档说明 在文档中对所有的面试题都进行了难易程度和出现频率的等级说明 星数越多代表…...

[RK3399 Linux] 使用busybox 1.36.1制作rootfs

一、 编译、安装、配置 busybox 1.1 下载源码 根文件系统是根据busybox来制作的。 下载地址:https://busybox.net/downloads/。 这里就以1.36.1版本为例进行编译安装介绍: 注意:编译linux内核与文件系统中的所有程序要使用相同的交叉编译器。 下载完成后解压: mkdir …...

JavaScript入门--循环

JavaScript入门--循环 一、for循环二、for in语句三、break语句四、continue语句五、while循环六、do-while语句一、for循环 先来看一个循环案例: for (i = 0; i < 5; i++) {...

【Delphi 爬虫库 1】GET和POST方法

文章目录 1.最简单的Get方法实现2.可自定义请求头、自定义Cookie的Get方法实现3.提取响应协议头4.Post方法实现单词翻译 爬虫的基本原理是根据需求获取信息并返回。就像当我们感到饥饿时&#xff0c;可以选择自己烹饪食物、外出就餐&#xff0c;或者订外卖一样。在编程中&#…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...