BFS(广度优先搜索)记忆搜索(三)

GPS卫星轨道的理论和计算笔记分享 广义相对论预测,对比在时空弯曲度较大的地面上的原子钟,运行于时空弯曲度较小的卫星原子钟在地面上看起来更快,每天快约45us;反过来,当电压施加在晶体上时,晶体形状会扭曲(比如说伸长),而当晶体被施加上反向电压后,它将做相反的变形运动(比如缩短)。X轴:指向参考子午面与地球赤道的一个交点;从北黄极上方观察,地球北极在空间的运动轨迹是一个近似于以北黄极为中心的顺时针方向旋转的圆周,圆周半径等于。从上万年周期看,地球北极绕北黄极做大圆周运动,而从几年的短期来看,北极又在某一点处做局部的小幅椭圆运动。 阅读详情

  一提到BFS的时候大家一般都会申请一个数组vis,vis的作用是用来标记有没有搜索过,如果搜索过那么vis = 1,如果没有搜索过那么vis = 0,在每一次搜索的时候都会重新初始化vis, 把vis初始化为0,如果查询的次数比较多,那么就白白浪费了很多时间,很多的操作其实都是重复的,所以这篇博客讲述BFS+记忆搜索。

  大家在做BFS题的时候有没有意识到其实BFS在搜索的时候只是搜索连通的某块,就比如说你在一个荒岛上,其他人在另外一个岛上,你和其他人也没有办法取得联系,所以BFS的搜索也是一个道题,BFS模块搜索的其实只是互相连通模块,如果不互相连通那么这些模块其实没有任何关系,也就是不能相互到达。所以在记忆化搜索时vis就不用每次初始化,一次就行,vis用来记录可以相互到达的模块。在每次查询的时候只要先询问是否被分配到一个模块中,如果没有在就用BFS查询,如果有直接就知道这个模块的中几个点可以相互到达。

01迷宫     洛谷     P1141

连接:https://www.luogu.org/problemnew/show/P1141

题意:有一个仅由数字00与11组成的n×n格迷宫。若你位于一格0上,那么你可以移动到相邻44格中的某一格11上,同样若你位于一格1上,那么你可以移动到相邻44格中的某一格00上。你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。

题解:题意很简单,但是查询的次数比较多,如果只用最普通的查询那么这道题会直接TLE的,一开始我就直接普通的BFS算法,但是只通过了70%,其中有三个直接TLE,有三个点的数据太大,不适合直接查询,所以需要BFS+记忆化,只要某些点在同一个某块中这些点就可以相互到达。

这个是一开始大代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
#define N 1005
struct Node{
       int x, y;
       char pre;
}tmp1, tmp2;
char a[N][N];
int n, step;
int dx[8]={1,-1,0,0};
int dy[8]={0,0,1,-1,};
int vis[N][N];
void bfs(int st, int en){
     memset(vis, 0, sizeof(vis));
     step = 0;
     tmp1.x = st;
     tmp1.y = en;
     vis[st][en]= 1;
     tmp1.pre = a[st][en];
     queue<Node>q;
     q.push(tmp1);
     while(!q.empty()){
        tmp1 = q.front();
        q.pop();
        //cout<<tmp1.x<<" "<<tmp1.y<<endl;
        for(int i = 0; i < 8; i++){
            tmp2.x = tmp1.x + dx[i];
            tmp2.y = tmp1.y + dy[i];
            if(tmp2.x >= 0 && tmp2.x<n && tmp2.y>= 0&&tmp2.y < n && !vis[tmp2.x][tmp2.y]&& a[tmp2.x][tmp2.y]!=tmp1.pre){
                vis[tmp2.x][tmp2.y] = 1;
                tmp2.pre = a[tmp2.x][tmp2.y];
                q.push(tmp2);
                step++;
            }
        }
     }
}
int main(){
    int m, st, en;
    cin>>n>>m;
    for(int i = 0; i < n; i++){
        scanf("%s", a[i]);
    }
    while(m--){
        cin>>st>>en;
        bfs(st-1, en-1);
        cout<<step+1<<endl;
    }
return 0;
}

这个是AC代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
#define N 1005
#define maxn 1000005
struct Node
{
    int x, y;
    char pre;
} tmp1, tmp2;
char a[N][N];
int n, num = 0;
int dx[8]= {1,-1,0,0};
int dy[8]= {0,0,1,-1,};
int vis[N][N];
int ans[maxn];
int bfs(int st, int en)
{
    num++;
    int step = 1;
    tmp1.x = st;
    tmp1.y = en;
    vis[st][en]= num;
    tmp1.pre = a[st][en];
    queue<Node>q;
    q.push(tmp1);
    while(!q.empty())
    {
        tmp1 = q.front();
        q.pop();
        for(int i = 0; i < 8; i++)
        {
            tmp2.x = tmp1.x + dx[i];
            tmp2.y = tmp1.y + dy[i];
            if(tmp2.x >= 0 && tmp2.x<n && tmp2.y>= 0&&tmp2.y < n && !vis[tmp2.x][tmp2.y]&& a[tmp2.x][tmp2.y]!=tmp1.pre)
            {
                vis[tmp2.x][tmp2.y] = num;
                tmp2.pre = a[tmp2.x][tmp2.y];
                q.push(tmp2);
                step++;
            }
        }
    }
    ans[num] = step;
    return step;
}
int main()
{
    int m, st, en;
    cin>>n>>m;
    for(int i = 0; i < n; i++)
    {
        scanf("%s", a[i]);
    }
    while(m--)
    {
        cin>>st>>en;
        if(!vis[st-1][en-1])//查询是否在一个模块中
            cout<<bfs(st-1, en-1)<<endl;
        else cout<<ans[vis[st-1][en-1]]<<endl;
    }
    return 0;
}

 

第9章:Embedding、Pooling 与检索增强基础 本文介绍了律师事务所如何利用vLLM构建法律文档RAG系统,解决传统关键词检索在语义匹配上的不足。主要内容包括: 项目背景:传统Elasticsearch检索在法律术语上的低准确率问题,及多模型维护的复杂性; 技术方案:采用vLLM统一支持生成和向量化能力,通过语义向量检索提升相关性; 关键实现: 用vLLM的Embedding端点处理文档向量化 构建包含离线索引和在线检索的完整RAG流程 采用余弦相似度进行语义匹配 实践建议:切片大小选择、向量归一化处理、不同场景下的数据库选型等。 阅读详情

相关推荐

压电陶瓷传感器避坑指南:实测阻抗匹配对信号输出的影响(附示波器调试技巧)

本文深入探讨压电陶瓷传感器在工业振动监测中的阻抗匹配问题,通过等效电路模型和实测数据揭示负载阻抗对信号输出的关键影响。文章提供从元件选型到示波器调试的完整解决方案,特别强调100kΩ以上负载阻抗的重要性,并分享JFET缓冲器设计和PCB布局的实用技巧,帮助工程师避免信号失真和输出不稳定问题。

ooo22的博客 516

leetcode:847. 访问所有节点的最短路径【bfs + 记忆化seen】

开始遍历的时候都可以为起点记忆化(now, mask)当mask第一次满了之后,就是最短的路径(注意,要记录一下当前的最短路径)

小楼一夜听春雨 510

ARS408毫米波雷达数据解析避坑指南:从硬件连接到Python处理

本文提供了ARS408毫米波雷达从硬件连接到Python数据处理的完整实战指南。针对串口通信不稳定、数据解析错误等常见问题,详细解析了硬件连接方案选择、串口数据高效读取策略、二进制协议解析的位操作技巧,并给出了坐标转换、目标跟踪及实时可视化的代码实现,帮助开发者快速搭建稳定的雷达数据处理流水线。

weixin_29091105的博客 149

LeetCode 279 完全平方数(BFS + 记忆化搜索)解法

题意说明 给定正整数n,找到若干个完全平方数(比如:1,4,9,16,……)使得它们的和等于n。找出组成和的完全平方数的最小个数。‘ 思路 看到最XXX,第一反应一般是动态规划或贪心。不过这一题贪心不能采取不断选取范围内的最大完全平方数的策略。比如:12 = 4 + 4 + 4为最优解,但是若采取如上所示的贪心策略,则:12 = 9 + 1 + 1 + 1并不是最优解。 此题也可以采取广度优先搜索BFS的方式进行求解,大致思路如下: 设置ans = 0,max = Math.sqrt(n)来限制完全平方

qq_42386550的博客 728

Cherry Studio 新手必看:5分钟搞定MCP服务器配置(附常见问题解决)

本文为Cherry Studio新手提供了详细的MCP服务器配置指南。文章从核心概念入手,解释了Cherry Studio作为MCP客户端如何通过MCP协议安全、标准化地扩展AI助手能力。重点讲解了uv和Bun环境的安装与常见网络问题的解决方案,并演示了如何添加首个MCP服务器(如mcp-server-fetch),助你快速构建可扩展的智能工作流。

corn8的博客 595

ECU诊断功能测试:从理论到实践

ECU诊断功能是指通过特定的诊断协议与ECU进行通信,以获取ECU的状态信息、故障码、数据流等,并执行特定的诊断操作。诊断功能的主要目的是帮助开发人员和维修人员快速定位和解决ECU中的问题,确保车辆的安全性和可靠性。UDS协议是ISO 14229标准的一部分,定义了一系列的诊断服务,如读取故障码、清除故障码、读取数据流等。UDS协议基于CAN(Controller Area Network)总线,具有较高的灵活性和扩展性。读取故障码是诊断功能中最基本的操作之一。通过读取故障码,可以快速定位ECU中的问题。

闲人编程的博客 1805

数据结构之bfs与dfs(记忆化搜索)

bfs-nowcoder F-maze 小明来到一个由n x m个格子组成的迷宫,有些格子是陷阱,用'#'表示,小明进入陷阱就会死亡,'.'表示没有陷阱。小明所在的位置用'S'表示,目的地用'T'表示。 小明只能向上下左右相邻的格子移动,每移动一次花费1秒。 有q个单向传送阵,每个传送阵各有一个入口和一个出口,入口和出口都在迷宫的格子里,当走到或被传送到一个有传送阵入口的格子时,小明可以选择...

代码行 552

【RT-DETR涨点改进】全网独家首发、特征融合改进篇 | AAAI 2026 | 引入CDEM交叉动态增强模块,双向引导和融合,在低光图像增强中有效提升了图像的亮度,提升小目标和暗目标的检测准确率

本文提出了一种基于CDEM(交叉动态增强模块)改进的rtdetr网络模型,有效提升了在低光和复杂环境下的目标检测性能。CDEM模块通过动态增强亮度与色彩特征,改善图像输入质量,增强细节和对比度。该模块具有轻量级结构,易于集成到现有模型中,能够显著提升小目标和暗目标的检测准确率与鲁棒性。文章详细介绍了CDEM模块的结构原理、实现方法,并提供了完整的代码实现和配置指南,包括三种改进版本的YAML配置文件。实验结果表明,该方法在图像增强和目标检测任务中均取得了优异性能。

Ai缝合怪、助力小伙伴高效发论文 142

BFS + 路径记忆

19蓝桥杯省赛 迷宫 题目描述:给定一个30行50列的迷宫,从左上角移动到右下角,并输出移动路径。 移动有四种方式“U,D,L,R”,分别表示往上下左右走。‘0’表示可以走,‘1’代表墙不能走。 解题思路:其实参加比赛的时候根本就不会,只学了个语言基础,连bfs都不会,赛后听学长说是bfs,后来学了bfs,还是不知道怎么解决输出路径的问题。过了好久才知道,只需要维护一个队首head和队尾tail指...

qq_43461168的博客 2138

MIPI CPHY学习笔记01:TX物理层一致性测试项解析(LP信令模式)

在手机、平板、智能手表等移动设备中,MIPI C-PHY是负责图像、数据传输的核心接口,它就像设备内部的“高速数据线”,而低功耗(LP)信令模式,是这条“数据线”的“省电模式”,专门用于设备待机、低负载等场景,既要保证信号稳定,又要最大限度降低功耗。物理层一致性测试,就是给这个“省电模式”做的“全面体检”,确保不同厂商的设备能兼容互通。今天,我们就聚焦MIPI C-PHY TX(发射端)的Group 1 LP信令测试,用通俗的语言拆解8个核心测试项,看懂“省电信号”的合格标准。

一只豌豆象的博客 300

小波变换完全指南:从原理到实践的深度解析

在信号处理领域,傅里叶变换长期以来一直是频域分析的主要工具。然而,傅里叶变换存在一个根本性的局限:它只能告诉我们信号中包含哪些频率成分,却无法告诉我们这些频率成分在什么时刻出现。这就像是你知道一首歌用了哪些音符,却不知道这些音符的演奏顺序。小波变换(Wavelet Transform) 应运而生,它完美地解决了这个问题。小波变换不仅能够提供频率信息,还能同时提供时间信息,实现了信号的时频联合分析。本文将带你从零开始,深入理解小波变换的原理、实现和应用。傅里叶变换的定义如下: 它使用正弦和余弦这样的全局基函数

电脑管家 207

算法总结(12)--dfs, bfs记忆化, 减少不必要的搜索

题目地址https://leetcode.com/problems/longest-increasing-path-in-a-matrix/题目描述Given an integer matrix, find the length of the longest increasing path.From each cell, you can either move to four directions:

master-dragon的专栏 2691

Android14 Qcom 从Framework到Driver带你打开WIFI(二)

上篇文章讲到了UI打开WIFI以后,逐步调用到加载底层驱动以及通知等相关流程。这篇接着上文继续往下看WIFI ON的后续动作。

IAYLBL的博客 763

章节三:图上涟漪:BFS层层推进解迷宫 - (广度优先搜索 / BFS)

本文介绍了广度优先搜索(BFS)算法的核心概念与应用。通过迷宫探险的生动比喻,阐述了BFS如何利用队列实现层级扩散搜索,确保找到无权图中的最短路径。文章详细解析了BFS的工作原理、时间复杂度(O(V+E))和空间复杂度(O(V)),并通过流程图直观展示搜索过程。最后提供了Java和Python的代码实现示例,展示如何使用邻接表完成BFS遍历。该算法适用于社交网络分析、路径规划等多种场景,是图论中最基础且重要的遍历方法之一。

杨小扩的博客 759

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

BFS(三):双向广度优先搜索

所谓双向广度搜索指的是搜索沿两个方向同时进行:(1)正向搜索:从初始结点向目标结点方向搜索;(2)逆向搜索:从目标结点向初始结点方向搜索;当两个方向的搜索生成同一子结点时终止此搜索过程。 广度双向搜索通常有两种方法:(1)两个方向交替扩展;(2)选择结点个数较少的那个方向先扩展。方法(2)克服了两方向结点的生成速度不平衡的状态,可明显提高效率。 【例1】Knight M...

weixin_30735745的博客 482

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

三、【图算法】广度优先搜索(BFS)

图算法是个庞大的家族,其中大部分成员的主体框架都可以归结于图的遍历。图的遍历需要访问所有顶点一次且仅 一次,此外,图遍历同时还要访问所有的边一次且仅一次。经过一次遍历,树边的顶点共同构成了原图的一颗遍历树。 为防止对顶点的重复访问,在遍历的过程中,需要动态地设置各顶点的不同状态,并且随着遍历的进程不断地转换状态,直至最后的“访问完毕”,图的遍历更加强调对处于特定状态顶顶啊的甄别和查找,故也称作图...

天涯明月刀的博客 460

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

GESP6级C++考试语法知识(二十八、广度优先搜索(三、层级 BFS))

GESP6级C++考试语法知识(二十八、广度优先搜索(三、层级 BFS))

汉克老师的博客 463

nyoj21 三个水杯 (BFS)

题目21题目信息运行结果本题排行讨论区 三个水杯 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。 输入第一行一个整数N(0 接下来每组

苏苏爱自由 3762

三个水杯-简单bfs

给你三个水杯的容量,只有第一杯里面装满水,其他两个水杯是空的,再输入三个目标值,问你是否能通过倒水达到这个目标,如果能,输入最少步数,如果不能,输出-1. 这题其实就是一个简单的BFS,以前感觉太麻烦了,一直不想写,今天终于AC了它。最后提示一下,BFS还是加上标记比较好。 #include #include #include #include #include using namespac

SSimpLe_Y的博客 559

nyoj 21-三个水杯(BFS)

21-三个水杯 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:7 submit:18 ...

devon2014的博客 113

三个水杯 搜索题 bfs

思路:abc三个水杯 一共有六种倒水方式。a-b,a-c ; b-a,b-c;c-d;广搜着6种方式即可。但是得判断杯子里的水放进另外一个杯子放不放的下,另外一个杯子需要多少水,杯子子里有没有水可放。不要忘记目标和初始状态一样那种情况。 三个水杯 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述给出三个水杯,大小不一,并且只有最大

旺旺的博客 1635

NYOJ21 三个水杯 【BFS】

三个水杯 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。 输入第一行一个整数N(0 接下来每组测试数据有两行,第一行给出三

长风的专栏 1780

【Leetcode】一文搞懂 BFS (广度优先搜索) —— 附“奇怪的电梯”题解

本文系统讲解了广度优先搜索(BFS)算法的核心思想与应用场景。BFS以"波纹扩散"的方式按层级遍历图结构,确保首次到达目标节点的路径即为最短路径。文章详细介绍了BFS的三个核心组件:队列(控制遍历顺序)、访问标记数组(防止重复访问)和步数记录器,并提供了标准Java实现模板。通过分析"奇怪的电梯"问题,展示了如何将实际问题建模为无权图的最短路径问题,并给出完整的BFS解决方案。文章强调BFS适用于求"最少操作次数"类问题,是解决无权图最短路径问题的标准算法。

一个coder的博客 4724

BFS算法学习

广度优先搜索(BFS)使用队列实现逐层遍历,确保在无权图中找到最短路径。其核心是队列操作与访问标记,空间复杂度较高。适用于层次遍历、最短路径搜索、连通性判断和扩散模拟等问题。实现时需注意状态表示和边界处理,常用优化包括双向BFS。掌握队列与标记的配合是理解BFS的关键。

2301_79461785的博客 480

C++用BFS广度优先搜索解POJ_3669_Meteor Shower问题

POJ_3669_Meteor Shower 就不放题目了,去POJ搜题号就可以看到 简单理解一下题目: 张三遇到了流星雨,

只想AC的博客 277

【Python算法实战】广度优先搜索(BFS)核心原理与三大工程级应用场景剖析

本文深入解析了广度优先搜索(BFS)的核心原理及其在Python中的实现,重点探讨了BFS在复杂网络最短路径规划、状态空间搜索与最优解验证、多源BFS与扩散模拟三大工程级应用场景。通过实际代码示例和对比分析,帮助开发者掌握BFS算法在物流配送、游戏AI寻路、拼图游戏解法等领域的实战应用。

weixin_34166472的博客 448
上一篇: BFS(广度优先搜索)简单例题(二)
下一篇: 字典树(Trie)
Re:fused
博客等级 码龄9年 474粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值