算法学习006-瓷砖总数 广度优先算法BFS 中小学算法思维学习 信奥算法解析 c++实现

目录

C++瓷砖总数

一、题目要求

1、编程实现

2、输入输出

二、算法分析

三、程序编写

四、程序说明

五、运行结果

六、考点分析

七、推荐资料


C++瓷砖总数

一、题目要求

1、编程实现

在一个长方形房间,铺着不同颜色的的瓷砖,有红色和黑色,一个人站在黑色瓷砖上,他可以上下左右四个方向移动到相邻的瓷砖,但他不能再红色瓷砖上移动,只能在黑色瓷砖上移动,编程计算他可以到达的黑色瓷砖的数量

2、输入输出

输入描述:第一行包含两个整数n和m,n表示有多少行,m表示每行有多少列,且n和m均不超过20;接下来有n行,每行有m个字符;‘.’表示黑色,‘#’表示红色,'@'表示起点人所在黑色瓷砖上位置,数据中只能出现一次

输出描述:只有一行,一个整数,即这个人从初始位置能够到达的瓷砖总数(包括起点)

输入样例:

5 6
. . # . . .
# # # . . .
. @ . . # .
. . # . . .
# . . . . #

输出样例:

20

二、算法分析

  1. 从给定题目的初步分析可以看出,这是一个比较典型的陷阱迷宫问题
  2. 较好的方式是使用广度优先搜索的方式进行实现
  3. 从初始位置出发,然后分别从初始位置的上下左右四个方向进行搜索,并逐一进行处理
  4. 如果当前点位在矩阵中且都是黑色就继续进行相应的处理,处理完了一个接着又从四个方向继续搜索并处理,直到矩阵中的所有位置全部搜索完毕
  5. 要实现广度优先算法最好是结合使用队列的方式进行,将每一个处理的点进行入队,然后出队,出队之后就判断四个方向的点是否符合,符合就依次入队,然后再依次出队,直到全部出队完毕即搜索结束

三、程序编写

四、程序说明

  1. 首先,在主函数中,通过输入获取了矩阵的行数和列数n和m,并使用一个二维数组grid存储矩阵的内容
  2. 然后,通过遍历矩阵,找到起点位置的坐标(x, y)
  3. 接下来,调用BFS函数进行广度优先搜索。BFS函数的参数是起点位置的坐标(px, py)
  4. 首先,初始化res为1,表示起点位置也是一个黑色瓷砖
  5. 然后,定义一个队列p,用于存储待处理的节点
  6. 在BFS函数中,首先将起点位置加入队列p
  7. 然后,进行循环,直到队列p为空
  8. 在每次循环中,首先从队列p中取出一个节点start
  9. 然后,对该节点的四个相邻节点进行判断,若该节点在矩阵范围内并且该节点的值是'.',则将该节点的值修改为'#',表示已经访问过,并将该节点加入队列p,并将res加1
  10. 最后,BFS函数结束后,输出res,即为黑色瓷砖的数量
  11. 整体思路就是通过广度优先搜索遍历矩阵中的每个黑色瓷砖,将黑色瓷砖的节点标记为已访问,并统计黑色瓷砖的数量
  12. 最后返回0,程序结束

 本文作者:小兔子编程 作者首页:https://blog.csdn.net/frank2102

五、运行结果

5 6
. . # . . .
# # # . . .
. @ . . # .
. . # . . .
# . . . . #20

六、考点分析

难度级别:男,这题相对而言还是有一定的难度,具体主要考查如下:

  1. 分析题目,找到解题思路
  2. 充分掌握二维矩阵的定义和使用
  3. 学会广度优先算法BFS的原理和应用
  4. 学会输入流对象cin的使用,从键盘读入相应的数据
  5. 学会for循环的使用,在确定循环次数的时候推荐使用学会
  6. 学会if条件判断语句的使用,满足一定条件才能执行后面的语句
  7. 学会if...else...双分支语句的使用,条件满足执行一种处理,不满足执行另一种处理
  8. 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
  9. 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
  10. 充分掌握二维矩阵定义和使用、分支语句、循环语句和广度优先算法知识的用法

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!

七、推荐资料

  • 所有考级比赛学习相关资料合集【推荐收藏】

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

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

相关文章

AR人脸道具SDK解决方案,实现道具与人脸的自然融合

AR人脸道具SDK解决方案&#xff0c;实现道具与人脸的自然融合美摄科技以其卓越的技术实力和创新能力&#xff0c;为企业带来了全新的AR人脸道具SDK解决方案。这一解决方案将为企业打开全新的市场机会&#xff0c;为用户带来前所未有的互动体验。 颠覆传统&#xff0c;开启AR人…

AI预测福彩3D第10套算法实战化赚米验证第1弹2024年5月5日第1次测试

从今天开始&#xff0c;准备启用第10套算法&#xff0c;来验证下本算法的可行性。因为本算法通过近三十期的内测&#xff08;内测版没有公开预测结果&#xff09;&#xff0c;发现本算法的预测结果优于其他所有算法的效果。彩票预测只有实战才能检验是否有效&#xff0c;只有真…

产业项目招商活动会议课程报名签到h5小程序pc开源版开发

产业项目招商活动会议课程报名签到h5小程序pc开源版开发 一个集PC和移动端功能于一体的解决方案&#xff0c;线上线下进行服务&#xff0c;围绕 活动报名、在线课程、项目大厅、线下签到、会员系统等。为商会提供了更加便捷高效的管理方式&#xff0c;提升了商会活动和项目的组…

qt day 3

优化登录框&#xff0c;点击登录按钮&#xff0c;如果账号和密码匹配&#xff0c;则弹出 信息对话框 给出提示信息“登录成功”&#xff0c;并给出一个 ok 按钮&#xff0c;当用户点击 ok 后&#xff0c;关闭当前界面&#xff0c;跳转到另一个界面&#xff1b;如果账号和密码不…

labview技术交流-将时间字符串转换成时间格式

应用场景 我们在数据库中设计了datetime类型的字段&#xff0c;比如字段名就叫“保存时间”&#xff0c;当我们使用labview将表中数据读取出来后datetime类型的数据是以字符串的格式显示的。而我们想计算两条数据“保存时间”的间隔时间时&#xff0c;用字符串类型自然是没法计…

OpenMV 图像串口传输示例

注意&#xff1a;本程序根据 OpenMV采集图片通过串口发送&#xff0c;PC接收并保存为图片 更改。 一、例程说明 这个例程主要实现了以下功能: 1. OpenMV 端采集图像:使用OpenMV开发板上的摄像头采集实时图像数据。 2. 通过串口传输图像数据:将采集到的图像数据打包成字节流,…

idea 项目 修改项目文件名 教程

文章目录 目录 文章目录 修改流程 小结 概要流程技术细节小结 概要 原项目名 修改流程 关掉当前项目的idea页面 修改之后的文件名 重新打开idea。选择项目打开项目页面 技术细节 出现下面这个问题&#xff0c;可以参考作者新的一编文章idea开发工具 项目使用Spring框架开发解…

【Linux】25. 网络基础(一)

网络基础(一) 计算机网络背景 网络发展 独立模式: 计算机之间相互独立; 网络互联: 多台计算机连接在一起, 完成数据共享; 其实本质上一台计算机内部也是一个小型网络结构(如果我们将计算机内部某个硬件不存放在电脑中&#xff0c;而是拉根长长的线进行连接。这其实也就是网…

在做题中学习(51): x的平方根

69. x 的平方根 - 力扣&#xff08;LeetCode&#xff09;​​​​​​ 解法&#xff1a;二分查找 思路&#xff1a;看示例2&#xff1a; 可以看到8的平方根是2.82&#xff0c;在2^2和3^2之间&#xff0c;所以可以把数组分为两部分&#xff0c;(具有二段性) 而2.82去掉小数部分…

【Kolmogorov-Arnold网络 替代多层感知机MLPs】KAN: Kolmogorov-Arnold Networks

KAN: Kolmogorov-Arnold Networks 论文地址 代码地址 知乎上的讨论&#xff08;看一下评论区更正&#xff09; Abstract Inspired by the Kolmogorov-Arnold representation theorem, we propose Kolmogorov-Arnold Networks (KANs) as promising alternatives to Multi-Layer…

【OceanBase 系列】—— OceanBase v4.3 特性解读:查询性能提升之利器列存储引擎

原文链接&#xff1a;OceanBase 社区 对于分析类查询&#xff0c;列存可以极大地提升查询性能&#xff0c;也是 OceanBase 做好 HTAP 和 OLAP 的一项不可缺少的特性。本文介绍 OceanBase 列存的实现特色。 OceanBase从诞生起就一直坚持LSM-Tree架构&#xff0c;不断打磨功能支…

2020 年国考【计算机专业】真题及答案

真题及答案 第一部分数学基础课程 一、&#xff08;共 5 分&#xff09;用逻辑符号表达下列语句&#xff08;论域为包含一切事物的合集&#xff09; &#xff08;2 分&#xff09;确诊者并不都有症状&#xff08;注&#xff1a;需给出两种形式表达, 一种用存在量词, 一种用全称…

python魔法方法是什么

魔法方法是python内置方法&#xff0c;不需要主动调用&#xff0c;存在的目的是为了给python的解释器进行调用&#xff0c;几乎每个魔法方法都有一个对应的内置函数&#xff0c;或者运算符&#xff0c;当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法&…

MVC与MVVM架构模式

1、MVC MVC&#xff1a;Model-View-Controller&#xff0c;即模型-视图-控制器 MVC模式是一种非常经典的软件架构模式。从设计模式的角度来看&#xff0c;MVC模式是一种复合模式&#xff0c;它将多个设计模式结合在一种解决方案中&#xff0c;从而可以解决许多设计问题。 MV…

【3D目标检测】常见相关指标说明

一、mAP指标 mean Average Precision&#xff08;平均精度均值&#xff09;&#xff0c;它是目标检测和信息检索等任务中的重要性能指标。mAP 通过综合考虑精度和召回率来衡量模型的总体性能。 1.1 精度&#xff08;Precision&#xff09; 表示检索到的目标中实际为正确目标…

Spring Task及订单状态定时处理

1&#xff1a;Spring Task概念&#xff1a; Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑 定时任务的理解 定时任务即系统在特定时间执行一段代码&#xff0c;它的场景应用非常广泛&#xff1a; 购买游戏的月卡会员后&a…

Centos7网络处理name or service not known

1、编辑->虚拟网络编辑器 2、查看本机的ip 3、 /etc/sysconfig/network-scripts/ 查看文件夹下面的 ifcfg-eth33 后面的33可能不一样 vi /etc/resolv.conf 编辑文件添加以下DNS nameserver 114.114.114.114 4、设置本机的网络 5、ping www.baidu.com 先重启…

第50期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

全双工音频对讲模块-支持空中升级、多级无线中继

SA618F30是一款高集成的大功率全双工无线音频模块&#xff0c;发射功率高达32dBm。该音频模块简化接口&#xff0c;只需外接音频功放或麦克风即可作为一个小型对讲机&#xff0c;方便快捷嵌入到各类手持设备中。支持多级无线中继&#xff0c;支持OTA空中升级。 SA618F30配备1W…

Java快速入门系列-11(项目实战与最佳实践)

第十一章&#xff1a;项目实战与最佳实践 11.1 项目规划与需求分析项目规划需求分析实例代码 11.2 系统设计考虑实例代码 11.3 代码实现与重构实例代码 11.4 性能优化与监控实例代码 11.5 部署与持续集成/持续部署(CI/CD)实例代码 11.1 项目规划与需求分析 在进行任何软件开发…