7.27 bfs学习
BFS 三题题解复盘前言本次三题覆盖了 BFS 的三大核心模型题目模型核心特征P1747 好奇怪的游戏反向 BFS从终点反向搜索移动可逆P1443 马的遍历距离 BFS单源多点距离数组P2895 流星雨时间限制 BFS预处理危险时间 BFS第一部分P1747 好奇怪的游戏基本信息项目内容题目编号、来源P1747 洛谷 / 好奇怪的游戏训练层级B BFS基础知识版块BFS、反向搜索、状态搜索解题前・关键信号识别维度分析目标、约束、底层结构目标两匹马到达 (1,1) 的最少步数约束移动规则固定日字田字底层结构棋盘可看作无权图每个位置是一个节点移动方式是边。数据规模坐标范围小BFS 完全可行。候选算法和依据BFS依据求最少步数 无权图最短路。复杂度预判时间复杂度 O(棋盘面积 × 移动方式数)空间复杂度 O(棋盘面积)。解题后・外化复盘维度内容实现结构 / 核心思路第一步从终点 (1,1) 开始 BFS反向搜索因为马的移动可逆从终点搜索得到所有位置到终点的距离第二步枚举 12 种移动方式8 个日字 4 个田字未访问位置入队第三步输出 dis[x][y] 即为该点到 (1,1) 的最少步数。核心思想移动对称性 → 反向 BFS 一次预处理多次查询 O(1)。错因回溯1. 忘记调用 BFS 就直接输出 dis 数组2. 方向数组写错日字 8 个 田字 4 个共 12 种3. BFS 入队时忘记立即标记访问。边界和易错点1. 坐标从 1 开始不能小于 12. 移动方式共 12 种不是 8 种3. BFS 入队时立即标记防止重复入队。下次看到什么信号我应该想到这个方法看到「最少步数 棋盘移动规则固定」用 BFS 最短路看到「多组询问到同一点」用反向 BFS 预处理。AC 完整代码#includeiostream#includecstring#includequeue#includealgorithmusingnamespacestd;intx1,y1,x2,y2;intdis[25][25];intdx[]{2,1,-1,-2,-2,-1,1,2,2,2,-2,-2};intdy[]{1,2,2,1,-1,-2,-2,-1,2,-2,2,-2};voidbfs(){queuepairint,intq;q.push({1,1});memset(dis,-1,sizeof(dis));dis[1][1]0;while(!q.empty()){auto[x,y]q.front();q.pop();for(inti0;i12;i){intnxxdx[i];intnyydy[i];if(nx0ny0dis[nx][ny]-1){dis[nx][ny]dis[x][y]1;q.push({nx,ny});}}}}intmain(){cinx1y1x2y2;bfs();coutdis[x1][y1]endl;coutdis[x2][y2]endl;return0;}第二部分P1443 马的遍历基本信息项目内容题目编号、来源P1443 洛谷 / 马的遍历训练层级B BFS基础强化知识版块BFS、距离数组、网格搜索解题前・关键信号识别维度分析目标、约束、底层结构目标求一个马到棋盘所有点的最短距离约束棋盘 n×mn,m ≤ 400底层结构单源多点 BFS 距离扩散。数据规模n,m ≤ 400400×400160000BFS 完全可行。候选算法和依据BFS依据一个起点到所有点的最短距离 BFS 距离数组。复杂度预判时间复杂度 O(n×m×8)空间复杂度 O(n×m)。解题后・外化复盘维度内容实现结构 / 核心思路第一步从起点 (x,y) 开始 BFS第二步枚举 8 种马走日方式第三步每到一个新格子记录dis[nx][ny] dis[x][y] 1第四步输出整个 dis 矩阵。核心思想BFS 天然具有最短路性质第一次到达即为最短距离。错因回溯1. 输出时循环下标写错从 0 开始而非从 1 开始2. 方向数组只有 8 种马走日3. 距离数组初始化为 0 导致无法区分未访问和起点。边界和易错点1. 棋盘坐标从 1 开始输出时循环for(int i1;in;i)2. 距离数组初始化为 -13. 入队时立即标记距离。下次看到什么信号我应该想到这个方法看到「一个起点 求所有点最短距离」用 BFS 距离扩散。AC 完整代码#includeiostream#includecstring#includequeue#includealgorithmusingnamespacestd;intn,m,x,y;intdis[405][405];intdx[]{2,2,-2,-2,1,1,-1,-1};intdy[]{1,-1,1,-1,2,-2,2,-2};voidbfs(inti,intj){queuepairint,intq;memset(dis,-1,sizeof(dis));q.push({i,j});dis[i][j]0;while(!q.empty()){auto[x,y]q.front();q.pop();for(inta0;a8;a){intnxxdx[a];intnyydy[a];if(nx0nxnny0nymdis[nx][ny]-1){dis[nx][ny]dis[x][y]1;q.push({nx,ny});}}}}intmain(){cinnmxy;bfs(x,y);for(inti1;in;i){for(intj1;jm;j){coutdis[i][j] ;}coutendl;}return0;}第三部分P2895 流星雨时间限制 BFS基本信息项目内容题目编号、来源P2895 洛谷 / Meteor Shower训练层级B BFS进阶知识版块BFS、预处理、时间状态解题前・关键信号识别维度分析目标、约束、底层结构目标找到最快到达安全位置的时间约束格子会在某个时间被摧毁底层结构状态 位置 时间需要预处理危险时间。数据规模坐标 ≤ 300影响范围可能到 301搜索范围扩展到 505。候选算法和依据预处理 BFS依据每个位置有开放/关闭时间BFS 时需判断到达时间是否早于危险时间。复杂度预判时间复杂度 O(棋盘面积)空间复杂度 O(棋盘面积)。解题后・外化复盘维度内容实现结构 / 核心思路第一步定义dis[x][y]表示该格子最早被摧毁的时间初始化为 INF第二步读入流星数据更新自身及上下左右四个格子共 5 个点的危险时间取最小值第三步 BFS 从 (0,0) 开始vis[x][y]记录到达时间第四步转移条件vis[x][y] 1 dis[nx][ny]第五步若到达dis[x][y] INF的位置即为安全点输出时间。核心思想预处理危险时间BFS 带时间状态搜索。错因回溯1. 使用 set 记录危险位置无法记录具体时间 → 必须用时间数组2. 危险时间数组未初始化为 INF默认 0 导致错误3. 边界范围不足流星坐标 ≤300影响可能到 3014. 到达时间必须严格小于摧毁时间不是。边界和易错点1. 起点 (0,0) 可能在 t0 时被摧毁需特判2. 流星影响 5 个格子自身 上下左右3. 搜索范围扩展到 5054. BFS 距离即为时间5. 入队时立即标记访问。下次看到什么信号我应该想到这个方法看到「最短路 每个位置有开放/关闭时间」用时间限制 BFS。AC 完整代码#includeiostream#includecstring#includequeue#includealgorithm#includesetusingnamespacestd;setpairint,ints;intvis[505][505];intdis[505][505];intdx[]{-1,0,1,0,0};intdy[]{0,1,0,-1,0};constintINF0x3f3f3f3f;intbfs(){if(dis[0][0]0){return-1;}memset(vis,-1,sizeof(vis));queuepairint,intq;q.push({0,0});vis[0][0]0;while(!q.empty()){auto[x,y]q.front();q.pop();if(dis[x][y]INF){returnvis[x][y];}for(inti0;i4;i){intnxxdx[i];intnyydy[i];if(nx0||ny0||nx505||ny505)continue;if(vis[nx][ny]!-1)continue;if(vis[x][y]1dis[nx][ny])continue;vis[nx][ny]vis[x][y]1;q.push({nx,ny});}}return-1;}intmain(){memset(dis,0x3f,sizeof(dis));intm;cinm;while(m--){intx,y,t;cinxyt;for(inti0;i5;i){intnxxdx[i];intnyydy[i];if(nx0ny0nx505ny505){s.insert({nx,ny});if(dis[nx][ny]t){dis[nx][ny]t;}}}}coutbfs();return0;}

相关新闻

LabVIEW在太赫兹时域光谱系统中的应用与实践

LabVIEW在太赫兹时域光谱系统中的应用与实践

1. 太赫兹时域光谱系统概述太赫兹时域光谱(THz-TDS)系统是一种利用飞秒激光脉冲激发和探测太赫兹波的先进测量技术。这个频段(0.1-10 THz)位于微波和红外之间,具有独特的穿透性和指纹光谱特性,在材料表征、…

2026/7/28 6:01:43阅读更多 →
Jetson Nano CSI与USB摄像头调用全攻略:从硬件连接到性能优化

Jetson Nano CSI与USB摄像头调用全攻略:从硬件连接到性能优化

1. 项目概述:为什么要在Jetson Nano上折腾摄像头?如果你手头有一块NVIDIA Jetson Nano 2GB开发板,并且已经完成了系统烧录、基础环境配置,那么接下来最自然、也最令人兴奋的一步,就是让它“睁开眼”——接入摄像头&…

2026/7/28 6:01:43阅读更多 →
Next.js for Drupal多站点配置指南:轻松管理多个Drupal前端

Next.js for Drupal多站点配置指南:轻松管理多个Drupal前端

Next.js for Drupal多站点配置指南:轻松管理多个Drupal前端 【免费下载链接】next-drupal Next.js for Drupal has everything you need to build a next-generation front-end for your Drupal site: SSG, SSR, and ISR, Multi-site, Authentication, Webforms, Se…

2026/7/28 6:01:43阅读更多 →
基于MATLAB的变电站智能视频分析系统开发实践

基于MATLAB的变电站智能视频分析系统开发实践

1. 项目背景与核心需求 变电站作为电力系统的关键节点,其安全运行直接关系到电网稳定性。传统人工巡检存在效率低、漏检率高的问题,特别是在复杂环境中对运动目标的识别和人员着装合规性检查方面尤为突出。我们团队基于MATLAB开发的视频处理系统&#xf…

2026/7/28 13:16:37阅读更多 →
APK安装器终极指南:无需模拟器在Windows电脑运行安卓应用

APK安装器终极指南:无需模拟器在Windows电脑运行安卓应用

APK安装器终极指南:无需模拟器在Windows电脑运行安卓应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接安装和运行安卓应用吗&…

2026/7/28 13:16:37阅读更多 →
终极文件编码检测解决方案:EncodingChecker完全使用指南

终极文件编码检测解决方案:EncodingChecker完全使用指南

终极文件编码检测解决方案:EncodingChecker完全使用指南 【免费下载链接】EncodingChecker A GUI tool that allows you to validate the text encoding of one or more files. Modified from https://encodingchecker.codeplex.com/ 项目地址: https://gitcode.c…

2026/7/28 13:16:37阅读更多 →
基于Spring AI与pgvector的RAG语义缓存优化实践

基于Spring AI与pgvector的RAG语义缓存优化实践

1. 项目背景与核心价值 在构建基于大语言模型(LLM)的智能应用时,检索增强生成(RAG)已成为解决模型幻觉问题和扩展知识边界的主流方案。但传统RAG流程存在一个显著痛点:每次用户查询都需要完整执行"检索…

2026/7/28 13:16:37阅读更多 →
PHP文件包含漏洞深度解析:从LFI到RFI的攻防实战与CTF案例

PHP文件包含漏洞深度解析:从LFI到RFI的攻防实战与CTF案例

1. 项目概述:为什么文件包含漏洞是Web安全的“必修课”在Web渗透测试和CTF竞赛的赛场上,PHP文件包含漏洞(File Inclusion Vulnerability)是一个经久不衰的核心考点。无论是初出茅庐的安全爱好者,还是经验丰富的红队成员…

2026/7/28 13:16:37阅读更多 →
Langchain框架解析:大语言模型应用开发实战指南

Langchain框架解析:大语言模型应用开发实战指南

1. Langchain入门:从零开始的AI应用开发指南最近在技术社区看到不少关于Langchain的讨论,作为一个刚接触这个工具的新手,我花了三周时间系统学习了它的核心功能和应用场景。Langchain本质上是一个帮助开发者快速构建基于大语言模型(LLM)应用的…

2026/7/28 13:14:36阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →