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

BFS广度优先搜索详解

对于BFS的,我来谈一谈自己的理解。首先,我们从一道最基础的题来进行学习:

洛谷B3625 迷宫寻路(仔细阅读哦,我就不解释了)

B3625 迷宫寻路 - 洛谷 | 计算机科学教育新生态

对于这道题以及所有的BFS题目的核心,我们的思想是这样的:

直接暴力枚举每一种情况,并把其放入队列(因为队列符合BFS算法所需要的先进先出),在枚举完这一种情况的所有符合条件的衍生情况并入队后,把这一种情况出队,枚举下一个,也就是出队后的队首元素,直至找到符合条件的答案。又或者是说,枚举完了所有情况,都没有找到正确答案,在程序运行中体现这一点的是队列为空都没有找到答案的情况。

示例:

有一个n*m的方格,里面'#'的地方是不能走的,起点是(1,1),终点是(n,m),那么如以下图形:

.##.#
.#...
...#.

刚开始的队列(数据类型可以是pair、结构体等):

(1,1) 

想要从(1,1)走到(n,m),我们可以按刚才说的流程,把(1,1)的所有衍生坐标入队,而且入队条件为该区域不为'#'且在n*m以内。

入队后的队列:

(1,1) (2,1)

为什么只有(2,1)一个呢,这是因为对于(1,1)来说,不考虑入队条件,(1,1)确实有四种衍生情况:(0,1)(2,1)(1,2)(1,0),但其中,(0,1)(1,0)超出了n*m的范围,而(1,2)则是不能通行的'#'区域,所以最终,只有(2,1)一个符合条件的坐标被加入到了队列。可到这就完了吗?不,我们在上面说过,还需要把枚举完了所有情况的(1,1)节点出队,因为它不是答案,且没有了为答案提供价值的能力。这一点在代码里的体现不太一样,在代码中,作者是把(1,1)节点先用t保存起来,再直接出队,之后再用t代替(1,1)的作用。现在,我们就完成了一次程序将要做的枚举。之后再照着这种方式继续即可求解出答案。

全部过程展示(队列,,一行为一次枚举):

                                                                (1,1)

                                        ​​​​​​​        ​​​​​​​        ​​​​​​​        (2,1)

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        (3,1)

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        (3,2)

                                                                (3,3)

                                                                (2,3)

                                                                (2,4)

                                                                (2,5)

                                                                (2,6)

因数据太水一条路拉通

代码实现:

        对于程序实现上的补充:

       进行一次枚举时,我们需要一个标记来表示这个路段是否走过,否则,我们的程序会在两个路

       段上反复横跳。

#include<iostream>
#include<queue>
using namespace std;
int n,m;
bool temp=false;
char map[101][101];
int vis[101][101];

int dx[5]={0,0,1,-1},dy[5]={1,-1,0,0};
bool bfs(int map_x,int map_y){
    if(map_x==n&&map_y==m){
        temp=true;
    }
    if(map_x>=1&&map_x<=n&&map_y>=1&&map_y<=m){
        for(int i=0;i<4;i++){
            int xx=map_x+dx[i];
            int yy=map_y+dy[i];
            if(map[xx][yy]!='#'&&vis[xx][yy]!=1){
                vis[xx][yy]=1;
                bfs(xx,yy);
            }
        }
    }
    return temp;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>map[i][j];
        }
    }
    bool x=bfs(1,1);
    if(x){
        cout<<"Yes";
    }else{
        cout<<"No";
    }
    return 0;
}

相关文章:

BFS广度优先搜索详解

对于BFS的&#xff0c;我来谈一谈自己的理解。首先&#xff0c;我们从一道最基础的题来进行学习: 洛谷B3625 迷宫寻路&#xff08;仔细阅读哦&#xff0c;我就不解释了&#xff09; B3625 迷宫寻路 - 洛谷 | 计算机科学教育新生态 对于这道题以及所有的BFS题目的核心&#x…...

vue项目利用webpack进行优化案例

使用 Webpack 优化 Vue 项目是提升性能和减少打包体积的关键步骤。以下是几个常见的优化案例及其详细实现方法&#xff1a; 1. 优化打包大小 1.1 按需加载 (Lazy Loading) Vue 提供了路由懒加载功能&#xff0c;可以将组件拆分成独立的块&#xff0c;按需加载&#xff0c;从而…...

如何单独安装 MATLAB 工具箱

很多时候由于 MATLAB 太大而选择安装一些 Toolbox&#xff0c;但用着用着发现要用到某个没有安装的 Toolbox&#xff0c;这时候就需要再单独安装这个 Toolbox&#xff0c;下面提供两种方法。 本文以安装 系统辨识工具箱 System Identification Toolbox 为例。 方法一&#xf…...

组网实训实现

小型单元网络实现 IP划分&#xff1a; 外网:172.1.1.0/24 172.1.2.0/24 内网&#xff1a;基于192.168.3.0/24的子网划分 综合办公楼&#xff1a;192.168.3.00 000000 /26&#xff08;192.168.3.0-192.168.3.63&#xff09; 综合一楼&#xff1a;192.168.3.0000 0000 /28&…...

openbmc sdk09.03 适配(一)

1.说明 本节是根据最新的sdk09.03适配ast2600平台。 sdk下载路径为: https://github.com/AspeedTech-BMC/openbmc可参阅文档: https://blog.csdn.net/wit_yuan/article/details/144613247nfs挂载方法: # mount -o nolock -t nfs serverip:/xx...

SQL使用存储过程

本文介绍什么是存储过程&#xff0c;为什么要使用存储过程&#xff0c;如何使用存储过程&#xff0c;以及创建和使用存储过程的基本语法。 1. 存储过程 迄今为止&#xff0c;我们使用的大多数SQL语句都是针对一个或多个表的单条语句。并非所有操作都这么简单&#xff0c;经常…...

C语言----函数、指针、数组

目录 ​编辑 指针函数 本质 格式&#xff1a; 函数指针 1、 概念 2、 格式 3、 举例 3.1基本用法 3.2函数指针作为函数参数的用法(回调函数) 函数指针数组 1. 概念 2. 格式 3. 例子 指针函数 本质 是函数&#xff0c;返回值为指针 格式&#xff1a; 数据类型…...

基于Java的敬老院管理系统的设计和实现【源码+文档+部署讲解】

基于Java的敬老院管理系统设计和实现 摘 要 新世纪以来,互联网与计算机技术的快速发展,我国也迈进网络化、集成化的信息大数据时代。对于大众而言,单机应用早已成为过去&#xff0c;传统模式早已满足不了当下办公生活等多种领域的需求,在一台电脑上不联网的软件少之又少&#x…...

12306分流抢票软件 bypass v1.16.43 绿色版(春节自动抢票工具)

软件介绍 12306Bypass分流抢票软件&#xff0c;易操作强大的12306抢票软件&#xff0c;全程自动抢票&#xff0c;云识别验证码打码&#xff0c;多线程秒单、稳定捡漏&#xff0c;支持抢候补票、抢到票自动付款&#xff0c;支持多天、多车次、多席别、多乘客、短信提醒等功能。…...

【数据仓库】hadoop3.3.6 安装配置

文章目录 概述下载解压安装伪分布式模式配置hdfs配置hadoop-env.shssh免密登录模式设置初始化HDFS启动hdfs配置yarn启动yarn 概述 该文档是基于hadoop3.2.2版本升级到hadoop3.3.6版本&#xff0c;所以有些配置&#xff0c;是可以不用做的&#xff0c;下面仅记录新增操作&#…...

小试牛刀-SpringBoot集成SOL链

目录 一、什么是solanaj? 二、Pom依赖 三、主要类 3.1 RpcClient 3.2 PublicKey 3.3 Transaction 3.4 TransactionInstruction 四、示例代码 Welcome to Code Blocks blog 本篇文章主要介绍了 [小试牛刀-SpringBoot集成SOL链] ❤博主广交技术好友&#xff0c;喜欢文章的…...

批量插入报错: No value specified for parameter

先上代码和xml文件: 错误: ### Cause: java.sql.SQLException: No value specified for parameter 9 ; bad SQL grammar []; nested exception is java.sql.SQLException: No value specified for parameter 9代码: List<HwcListingData> theList new ArrayList<&g…...

VSCode设置ctrl或alt+mouse(left)跳转

总结&#xff1a; &#xff08;1&#xff09;VSCode初次远程连接服务器时&#xff0c;需要在服务器上下载 python 拓展&#xff0c;然后选择对应的环境 &#xff08;2&#xff09;VSCode设置ctrl或altmouse(left)跳转到定义...

Crosslink-NX应用连载(12):如何复用特殊功能管脚

作者&#xff1a;Hello,Panda 大家早上好。 昨天有朋友私信我&#xff0c;如何复用Crosslink-NX的特殊功能引脚如PROGRAMN、DONE、INITN诸如这些。熊猫君在这里简单介绍下&#xff1a; 以LIFCL-33U-8CTG104C为例&#xff0c;我们建立一个简单的指示灯LED周期闪烁的工程&…...

‘元素.style.样式名‘获取不到样式,应该使用Window.getComputedStyle()获取正真的样式

一、问题描述 有一次&#xff0c;想通过js获取一个元素的样式的某个属性状态而去执行不同的逻辑代码&#xff0c;结果发现获取的样式总是不对&#xff0c;基本为空。&#xff08;通过元素.style.样式名的方式去获取。&#xff09; 通过打印发现&#xff0c;所有的属性均存在&…...

双目视觉:reprojectImageTo3D函数

前言 reprojectImageTo3D 是 OpenCV 中用于从视差图生成三维点云的函数。它的原理是利用视差图和相机的校准参数&#xff0c;通过三角测量法&#xff0c;计算每个像素对应的三维坐标。以下内容根据源码分析所写&#xff0c;觉得可以的话&#xff0c;点赞收藏哈&#xff01;&am…...

Arduino Uno简介与使用方法

目录 一、Arduino Uno概述 1. 硬件特性 2. 开发环境 二、Arduino Uno的基本使用方法 1. 硬件连接 2. 软件编程 三、Arduino Uno编程基础 1. 基本语法 2. 常用函数 四、Arduino Uno应用举例 1. LED闪烁 2. 温度检测 3. 超声波测距 五、Arduino Uno的扩展与应用 1…...

深入了解 StarRocks 表类型:解锁高效数据分析的密码

在当今数字化浪潮下&#xff0c;大数据分析成为企业决策、优化业务流程的关键利器。StarRocks 作为一款备受瞩目的高性能分析型数据库&#xff0c;其多样化的表类型为复杂的数据处理需求提供了精准解决方案。今天&#xff0c;就让我们一同深入探索 StarRocks 中的主键表、明细表…...

L27.【LeetCode笔记】2 的幂(五种解法)

目录 1.题目 2.自解 方法1:调用log函数 代码 提交结果 方法2:循环 提交结果 3.优解 方法3:位运算n & (n-1) 0 代码 提交结果 方法4:位运算lowbit 代码 提交结果 4.投机取巧的方法 代码 提交结果 1.题目 https://leetcode.cn/problems/power-of-two/?env…...

Pentaho Kettle迁移至Oracle的空字符串和NULL的问题处理,大坑!

一、问题说明 在使用 Kettle 将 DB2 数据迁移到 Oracle 的过程中&#xff0c;出现了 DB2 中为空字符串的字段&#xff0c;在插入到 Oracle 过程中实际插入的为 NULL &#xff0c;导致触发了非空校验而迁移失败 空字符串 ‘’ &#xff0c;即长度为0的字符串 搜索该问题后得知…...

SenseVoice语音识别镜像深度体验:自动语言检测+高效推理,实测效果惊艳

SenseVoice语音识别镜像深度体验&#xff1a;自动语言检测高效推理&#xff0c;实测效果惊艳 1. 开箱即用的语音识别体验 当我第一次启动SenseVoice语音识别镜像时&#xff0c;最直观的感受就是"快"。这个基于ONNX量化的多语言语音识别服务&#xff0c;从启动到可用…...

网盘直链获取工具:高效解析与实用指南

网盘直链获取工具&#xff1a;高效解析与实用指南 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改&#xff08;改自6.1.4版本&#xff09; &#xff0c;自用&#xff0c;去推广&#xff0c;无需输入…...

比话降AI使用教程:从注册到拿到合格检测报告全流程详解

比话降AI使用教程&#xff1a;从注册到拿到合格检测报告全流程详解 不少同学找到比话降AI&#xff0c;是因为看到了那个承诺&#xff1a;AI率大于15%全额退款&#xff0c;还退检测费。 这个承诺确实不一样。其他工具一般只说"效果不好可重做"&#xff0c;但重做了几…...

深度解析Scratch-www:模块化架构如何支撑全球最大编程教育平台

深度解析Scratch-www&#xff1a;模块化架构如何支撑全球最大编程教育平台 【免费下载链接】scratch-www Standalone web client for Scratch 项目地址: https://gitcode.com/gh_mirrors/scr/scratch-www Scratch-www作为全球最大的少儿编程教育平台Scratch的独立Web客户…...

Python数据分析实战:从零开始掌握数据处理核心技能

Python数据分析实战&#xff1a;从零开始掌握数据处理核心技能 【免费下载链接】pydata-book wesm/pydata-book: 这是Wes McKinney编写的《Python for Data Analysis》一书的源代码仓库&#xff0c;书中涵盖了使用pandas、NumPy和其他相关库进行数据处理和分析的实践案例和技术…...

STM32 HAL库里Systick中断优先级设成0x0F,你的定时器还准吗?

STM32 HAL库中Systick中断优先级设置对定时精度的影响与优化实践 在嵌入式开发领域&#xff0c;定时精度往往直接影响着系统性能与稳定性。许多开发者在使用STM32 HAL库时&#xff0c;可能从未深入思考过Systick中断优先级设置对系统定时精度的影响。本文将揭示一个容易被忽视但…...

Qwen3-0.6B-FP8环境配置:NVIDIA驱动验证、CUDA版本匹配与vLLM兼容性检查

Qwen3-0.6B-FP8环境配置&#xff1a;NVIDIA驱动验证、CUDA版本匹配与vLLM兼容性检查 1. 环境准备与快速部署 1.1 硬件与驱动要求 在开始部署Qwen3-0.6B-FP8模型前&#xff0c;我们需要确保硬件环境满足最低要求&#xff1a; GPU要求&#xff1a;至少8GB显存的NVIDIA显卡&am…...

如何免费解锁网盘高速下载:网盘直链下载助手终极指南

如何免费解锁网盘高速下载&#xff1a;网盘直链下载助手终极指南 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 你是否曾经因为网盘下载速度慢如蜗牛而烦恼&#xff1f;是否在办公环境中无法…...

全平台数据采集工具:BarrageGrab直播弹幕实时抓取解决方案

全平台数据采集工具&#xff1a;BarrageGrab直播弹幕实时抓取解决方案 【免费下载链接】BarrageGrab 抖音快手bilibili直播弹幕wss直连&#xff0c;非系统代理方式&#xff0c;无需多开浏览器窗口 项目地址: https://gitcode.com/gh_mirrors/ba/BarrageGrab 在数字直播时…...

Android与SpringBoot的轻量级数据桥梁——OkHttp3实战解析

1. OkHttp3与SpringBoot的黄金组合 第一次用OkHttp3对接SpringBoot后端时&#xff0c;我盯着满屏的404错误差点崩溃。后来才发现&#xff0c;原来是因为手机和电脑不在同一个WiFi下。这种看似低级的错误&#xff0c;恰恰是新手最容易踩的坑。OkHttp3作为Android端最流行的网络请…...