bfs——带地板类题
BFSBFS广度优先搜索是一种逐层扩展的搜索算法。从起点开始先访问所有距离为 1 的节点再访问所有距离为 2 的节点以此类推。核心特点第一次到达某个节点时一定是最短路径边权全为 1 时。基本框架1、普通queueNode q; q.push(起点); vis[起点] 1; while (!q.empty()) { auto cur q.front(); q.pop(); for (每个相邻节点 nxt) { if (nxt 合法 !vis[nxt]) { vis[nxt] 1; dis[nxt] dis[cur] 1; q.push(nxt); } } }2、0/1bfs用于边权只有 0 和 1 的最短路。做法用双端队列deque代替普通队列。走权值为 0 的边从队首插入走权值为 1 的边从队尾插入dequeNode dq; dq.push_front(起点); while (!dq.empty()) { auto cur dq.front(); dq.pop_front(); for (每条边) { if (边权 0 dis[nxt] dis[cur]) { dis[nxt] dis[cur]; dq.push_front(nxt); } if (边权 1 dis[nxt] dis[cur] 1) { dis[nxt] dis[cur] 1; dq.push_back(nxt); } } }3、优先队列 BFSDijkstra用于边权为任意非负整数的最短路。做法用优先队列小根堆代替普通队列按距离排序。priority_queueNode pq; pq.push({起点, 0}); while (!pq.empty()) { auto [cur, d] pq.top(); pq.pop(); if (d dis[cur]) continue; for (每条边) { if (dis[nxt] dis[cur] w) { dis[nxt] dis[cur] w; pq.push({nxt, dis[nxt]}); } } }4、双向 BFS用于起点和终点都已知且搜索空间极大。做法从起点和终点同时开始 BFS两个搜索相遇时结束。// 单词接龙、八数码、迷宫等 int bfs(string start, string end) { if (start end) return 0; queuestring q1, q2; // 两个方向的队列 unordered_mapstring, int d1, d2; // 两个方向的距离 q1.push(start); d1[start] 0; q2.push(end); d2[end] 0; while (!q1.empty() !q2.empty()) { // 每次扩展较小的队列优化 int t; if (q1.size() q2.size()) { t extend(q1, d1, d2); // 从起点方向扩展一步 } else { t extend(q2, d2, d1); // 从终点方向扩展一步 } if (t ! -1) return t; // 相遇了返回总距离 } return -1; // 无法到达 } int extend(queuestring q, unordered_mapstring, int d_cur, // 当前方向的距离 unordered_mapstring, int d_other) // 对面方向的距离 { int sz q.size(); while (sz--) { // 扩展一层 string cur q.front(); q.pop(); for (每个相邻状态 nxt) { if (d_cur.count(nxt)) continue; // 当前方向已经访问过 // 如果对面方向访问过说明相遇 if (d_other.count(nxt)) { return d_cur[cur] 1 d_other[nxt]; } d_cur[nxt] d_cur[cur] 1; q.push(nxt); } } return -1; // 还没相遇 }范题www.lanqiao.cn/problems/21594/learning/?page1first_category_id1定义dist[o][x][y][p]状态,表示技能剩余o次到达(x,y)时下一步的环境是p的最少代价,因为计算完代价,p就1了,符合结尾条件。使用技能是为了更好的符合环境是为了少扣血相当与一次免费改变环境为col的值的机会所以将每个可以改变的节点都试一次肯定可以找到最优路径不遗漏。#includebits/stdc.h #define ll long long #define ull unsigned long long #define endl \n using namespace std; //包含原地 int dx[]{1,0,-1,0,0}; int dy[]{0,1,0,-1,0}; struct node{ int x,y,p,cost,o;//x,y,当前环境,代价,是否有技能 bool operator(const nodeo)const{//优先队列代价小的优先 return costo.cost; } }; int bfs(vectorstringmap,vectorvectorintcol,int n,int m,int P){ int sx,sy; for(int i0;in;i){ for(int j0;jm;j){ if(map[i][j]S)sxi,syj; } } //四维数组定义 vectorvectorvectorvectorintdist(2,vectorvectorvectorint(n,vectorvectorint(m,vectorint(P,1e9)))); dist[1][sx][sy][0]0;//初始未使用技能,p0 priority_queuenodeq; q.push({sx,sy,0,0,1}); while(q.size()){ auto [x,y,p,cost,o]q.top();q.pop(); if(map[x][y]T)return cost;//优先队列一定不能早返回 for(int i0;i5;i){//遍历5种移动方向 int xxxdx[i],yyydy[i]; if(xx0||xxn||yy0||yym)continue; if(map[xx][yy]#)continue; int c(pcol[xx][yy])?0:1;//计算这步移动是否有代价 int np(p1)%P;//新环境值 if(dist[o][xx][yy][np]costc){//不使用技能 dist[o][xx][yy][np]costc; q.push({xx,yy,np,costc,o}); } if(o1){//使用技能 np(col[xx][yy]1)%P; if(dist[0][xx][yy][np]cost1){ dist[0][xx][yy][np]cost1; q.push({xx,yy,np,cost1,0}); } } } } return -1;//未找到 } void solve() { int n,m,P;cinnmP; vectorstringmap(n); for(int i0;in;i){ cinmap[i]; } vectorvectorintcol(n,vectorint(m)); for(int i0;in;i){ for(int j0;jm;j){ cincol[i][j]; } } coutbfs(map,col,n,m,P); } int main() { ios::sync_with_stdio(false), cin.tie(0); int t 1;//cint; while (t--)solve(); return 0; }

相关新闻

90%的Cocos开发者不知道,插件还能这么玩!

90%的Cocos开发者不知道,插件还能这么玩!

引言 哈喽大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 很多Cocos开发者平时都会用插件,但真正自己写过全局插件的小伙伴,可能并不多。 普通插件一般跟着项目走,只服务当前项目。 全局插件就不一样了&am…

2026/7/24 17:50:08阅读更多 →
Display Driver Uninstaller:为什么这款免费工具是显卡驱动清理的终极解决方案

Display Driver Uninstaller:为什么这款免费工具是显卡驱动清理的终极解决方案

Display Driver Uninstaller:为什么这款免费工具是显卡驱动清理的终极解决方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/displ…

2026/7/24 17:50:08阅读更多 →
GetQzonehistory:三步轻松备份QQ空间历史说说的完整指南

GetQzonehistory:三步轻松备份QQ空间历史说说的完整指南

GetQzonehistory:三步轻松备份QQ空间历史说说的完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在数字时代,QQ空间承载着我们珍贵的青春记忆。GetQzoneh…

2026/7/24 17:50:08阅读更多 →
Wand-Enhancer:零成本解锁WeMod专业版功能的终极解决方案

Wand-Enhancer:零成本解锁WeMod专业版功能的终极解决方案

Wand-Enhancer:零成本解锁WeMod专业版功能的终极解决方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 还在为WeMod专业版的高昂订阅…

2026/7/24 19:10:21阅读更多 →
为什么 `!=` 和 `NOT IN` 会让索引失效:从 B+ 树的有序性说起

为什么 `!=` 和 `NOT IN` 会让索引失效:从 B+ 树的有序性说起

前言 “这条 SQL 明明在索引列上查,怎么还是全表扫描?” 如果你把 WHERE status 1 改成 WHERE status ! 1,很可能就会遇到这个现象:同一个列、同一个索引,等值查询走得好好的,一换成 !(或 NOT …

2026/7/24 19:10:21阅读更多 →
WeChatExporter终极教程:三步永久备份你的微信聊天记录

WeChatExporter终极教程:三步永久备份你的微信聊天记录

WeChatExporter终极教程:三步永久备份你的微信聊天记录 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因为手机丢失、系统升级或微信清理而丢失了珍…

2026/7/24 19:10:21阅读更多 →
深入解析TAS3204音频DSP:DAP核心、I2C加载与启动序列实战

深入解析TAS3204音频DSP:DAP核心、I2C加载与启动序列实战

1. 项目概述:深入TAS3204音频DSP的内核与交互在嵌入式音频系统设计里,选对一颗数字信号处理器(DSP)只是第一步,真正考验工程师功力的,是如何“驯服”它。你得理解它的运算核心如何吞吐数据,知道…

2026/7/24 19:10:21阅读更多 →
从0到1上手Hermes:Hermes Agent从安装到模型接入使用(保姆级)

从0到1上手Hermes:Hermes Agent从安装到模型接入使用(保姆级)

前言 最近AI Agent工具更新很快,不少人想试试Hermes这个"会成长的助理",但对于我们最大的卡点是账号和环境问题。这篇文章帮你解决,从下载安装到模型跑通,一步步带你实操,尽量少踩坑,让你快速用…

2026/7/24 19:10:21阅读更多 →
Istio 环境搭建与 Sidecar 注入实战:从安装到验证

Istio 环境搭建与 Sidecar 注入实战:从安装到验证

系列导读 你现在看到的是《Istio 服务网格流量治理实战:从入门到精通》的第 2/10 篇,当前这篇会重点解决:跳过官方文档的坑,用实际案例完成 Istio 环境搭建并确认 Sidecar 正常工作。 上一篇回顾:第 1 篇《Istio 服务网格流量治理入门:核心概念与架构解析》主要聚焦 从…

2026/7/24 19:08:20阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

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

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

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

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

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

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

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

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

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

2026/7/24 19:00:40阅读更多 →