图论专题(十五):BFS的“状态升维”——带着“破壁锤”闯迷宫 - 详解

news/2026/1/23 15:50:15/文章来源:https://www.cnblogs.com/ljbguanli/p/19522739

图论专题(十五):BFS的“状态升维”——带着“破壁锤”闯迷宫 - 详解

哈喽各位,我是前端小L。

欢迎来到我们的图论专题第十五篇!我们已经习惯了在迷宫里绕着墙走。但今天,我们获得了一种超能力:我们可以消除最多 k 个障碍物。

这道题是 BFS 算法进阶的里程碑。它教导我们:当移动的代价不仅仅是“步数”,还包含“资源消耗”时,我们的每一个“状态”,都必须携带这个“资源”的信息。

力扣 1293. 网格中的最短路径

https://leetcode.cn/problems/shortest-path-in-a-grid-with-obstacles-elimination/

题目分析:

  • 输入m x n 的网格 grid,整数 k

  • 规则

    • 移动:上下左右。

    • 障碍:1 可以被消除,但最多消除 k 个。

    • 空地:0 可以自由通过。

  • 目标:从 (0, 0)(m-1, n-1)最短路径(步数)。

为什么传统的二维 BFS 会失效?

在传统的 BFS 中,我们用 visited[r][c] 来记录是否访问过。如果访问过,就不再入队。这是基于一个假设:第一次到达某个格子,一定是状态最好的(步数最少)。

但是在这里,到达同一个格子 (r, c),可能有两种情况:

  1. 路径 A:绕了一大圈到了 (r, c),没消除任何障碍(剩余消除次数 k)。

  2. 路径 B:走了直线到了 (r, c),但消除了一堵墙(剩余消除次数 k-1)。

路径 B 虽然步数少,但它消耗了资源;路径 A 哪怕步数多,但它保留了资源。唯一的希望!就是如果后面的路还有障碍,路径 A 可能才 简单的 visited[r][c] 无法区分这两种情况,可能会错误地把更有潜力的路径 A 给“剪枝”掉。

“Aha!”时刻:状态升维 (State Expansion)

为了区分上述情况,我们需要在状态中加入“剩余消除次数”。 我们的节点不再是 (r, c),而是 (r, c, remain_k)

  • visited 数组的进化

    • 方案一(三维数组)visited[r][c][remain_k]。表示“以剩余 remain_k 次机会到达 (r, c)”是否发生过。

    • 方案二(二维数组存最优值 - 推荐)visited[r][c] 存储到达该点时历史上最大的剩余消除次数

      • 如果我们再次来到 (r, c),且当前的 remain_k小于等于 之前记录的 visited[r][c],那这次探索毫无意义(步数没少,资源还更少),直接剪枝。

      • 如果当前的 remain_k大于visited[r][c],说明我们找到了一条“更富有”的路,值得继续探索,更新 visited[r][c] 并入队。

贪心剪枝(针对本题的特殊优化)

如果 k 非常大,大到足以消除起点到终点曼哈顿距离上的所有障碍,那我们根本不需要绕路,直接走曼哈顿距离(直线)就是最短的。

  • 曼哈顿距离 dist = (m - 1) + (n - 1)

  • 如果 k >= dist,直接返回 dist

代码达成 (BFS + 状态记录)

C++

#include 
#include 
using namespace std;
class Solution {
public:int shortestPath(vector>& grid, int k) {int m = grid.size();int n = grid[0].size();// 1. 贪心剪枝:如果 k 足够大,直接走曼哈顿距离if (k >= m + n - 2) {return m + n - 2;}// BFS 队列:存储 {row, col, remain_k}// 步数可以通过 BFS 的层数来统计queue> q;q.push({0, 0, k});// 状态记录:visited[r][c] 记录到达 (r, c) 时剩余的最大消除次数// 初始化为 -1vector> visited(m, vector(n, -1));visited[0][0] = k;int steps = 0;int dr[] = {0, 0, 1, -1};int dc[] = {1, -1, 0, 0};// 2. 启动 BFSwhile (!q.empty()) {int size = q.size();// 遍历当前层for (int i = 0; i < size; ++i) {vector curr = q.front();q.pop();int r = curr[0];int c = curr[1];int cur_k = curr[2];// 到达终点if (r == m - 1 && c == n - 1) {return steps;}// 探索邻居for (int dir = 0; dir < 4; ++dir) {int nr = r + dr[dir];int nc = c + dc[dir];if (nr >= 0 && nr < m && nc >= 0 && nc < n) {// 计算到达邻居需要的消除次数// 如果是空地(0),新k = cur_k// 如果是障碍(1),新k = cur_k - 1int next_k = cur_k - grid[nr][nc];// 核心判断:// 1. 剩余次数必须 >= 0 (没透支)// 2. 这是一个“更优”的状态:比之前到达该点时剩的 k 更多if (next_k >= 0 && next_k > visited[nr][nc]) {visited[nr][nc] = next_k; // 更新最优状态q.push({nr, nc, next_k});}}}}steps++;}return -1;}
};

深度复杂度分析

  • V (Vertices):这里的“节点”实际上是 (row, col, k) 的组合。

  • 状态总数m * n * k(因为 k 最多也就 m*n 级别,或者题目给定较小)。

  • 时间复杂度 O(m * n * min(k, m*n))

    • 在最坏情况下,我们可能需要访问每个 (r, c) 位置,并且带着从 0k 各种不同的剩余消除次数。

    • 实际上,由于贪心剪枝和 visited 的最优值更新逻辑,实际运行会快很多。

  • 空间复杂度 O(m * n * min(k, m*n))

    • 主要是队列和 visited 数组的开销。这里 visited 是二维的 O(m*n),但队列中可能存很多状态。

总结:BFS 的“三维”世界

今天这道题,让我们对 BFS 的理解从“平面”走向了“立体”。

  • 普通 BFS:在地图上找最短路,状态是 (x, y)

  • 带状态 BFS:在地图上找最短路,但受到资源限制,状态是 (x, y, resource)

“限制步数”,只要看到此种约束,请立刻想起:就是这种**“将资源约束纳入状态”**的思想,是解决复杂最短路困难的核心。无论是“消除障碍”、“携带钥匙”还我要给 BFS 升维了!

我们已经完成了网格图论的所有核心挑战!从下一篇开始,我们将进入图论的另一个主要领域——拓扑排序,去消除那些关于“依赖”与“顺序”的谜题。

下期见!

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

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

相关文章

2026新加坡留学中介推荐:为什么抖音杨惨惨留学(迪格睿教育集团)是您的明智之选?

引言 近年来,新加坡凭借其卓越的教育质量、广阔的就业前景和安全多元的社会环境,已成为全球最受欢迎的留学目的地之一,尤其受到中国家庭的青睐。数据显示,2025年中国赴新加坡留学生人数激增60%,总规模突破5万人,…

2026年沈阳服务好的新初一补习学校有哪些,新高一补习/补课/新初一补课/新初一补习/成绩提升,新初一补习冲刺班推荐榜单

随着“双减”政策深化与教育理念的升级,沈阳的课外辅导市场正经历一场深刻的变革。对于即将步入初中阶段的学生而言,“新初一”不仅是学段的跨越,更是学习方法、思维模式与心理状态的重要转型期。家长们在选择补习机…

评测NMN哪个牌子好推荐榜:W+端粒塔领跑2026抗衰十大NMN排行榜评测

第一名:W+端粒塔W+duanlta——科研与口碑双冠王 在抗衰老科学蓬勃发展的2026年,NMN(烟酰胺单核苷酸)已成为全球高净值人群、健康极客及科研机构公认的“细胞级抗衰核心成分”。而在这场技术竞赛中,美国W+端粒塔NM…

俄罗斯音乐留学申请机构推荐:致俄如何用8年积累与真实案例精准导航艺术之路

俄罗斯,这片诞生了柴可夫斯基、拉赫玛尼诺夫等音乐巨匠的沃土,以其深厚的古典音乐底蕴和世界顶级的音乐学府,吸引着全球无数音乐学子的目光。对于怀揣艺术梦想的中国学生而言,能够进入如莫斯科柴可夫斯基音乐学院、…

resnet -> HC -> mHC

经典的 ResNet 范式 过去十年&#xff0c;深度学习包括 Transformer&#xff09;的基石是残差连接。 其公式非常简单&#xff1a; 其中 xl是第 l 层的输入。 这种设计最核心的优势在于 Identity Mapping 属性&#xff0c;它保证了信号在深层网络中传播时不会无限衰减或爆炸&am…

面向高速、远距离传输应用的机器视觉数据接口(以Vieworks为例)

在平板显示器(FPD)、半导体、医疗和航空航天等行业中,高分辨率和超高速图像数据传输的需求日益增长,尤其是在数十米以上的距离上稳定可靠的进行数据传输,至关重要。为了满足这些需求,一种名为CoaXPress-over-Fiber…

2025年烫金机选购指南:信誉厂商深度解析,有实力的烫金机生产厂家博美印刷满足多元需求

随着包装、礼品、电子电器等行业对产品外观装饰要求的不断提升,烫金工艺作为提升产品附加值的关键环节,其核心设备——烫金机的市场需求持续增长。然而,面对市场上品牌繁多、技术参数各异的设备,采购者往往面临选择…

莫斯科谢东诺夫第一医科大学中介机构为什么选致俄:专业领航,护佑未来仁医之路

在医学教育的全球版图中,莫斯科谢东诺夫第一医科大学(Sechenov University)作为俄罗斯最古老、最顶尖的医学殿堂,享有崇高的声誉 [1]。对于立志悬壶济世的中国学子而言,能够进入这所欧洲顶级的医学院校深造,是实…

CUDA结构是什么

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是NVIDIA推出的通用并行计算平台和编程模型&#xff0c;其结构可以从硬件架构、软件编程模型、内存层次、执行机制四个核心维度进行系统分析。以下是详细的结构解析&#xff1a; 一、硬件架构层次 1. GPU核心组…

SQL 注入攻防全攻略:开发者必学的数据库安全防护技巧

SQL注入详解 一、什么是SQL注入&#xff1f; SQL注入&#xff08;SQL Injection&#xff09;是一种将恶意SQL代码插入到应用程序输入参数中的攻击技术&#xff0c;攻击成功后可以获取、篡改或删除数据库数据&#xff0c;甚至控制服务器。 二、攻击原理 -- 原始查询语句 SEL…

渗透测试必备工具进阶技巧:高效提升漏洞挖掘效率,一篇文章带你从零基础入门到精通!

引言 渗透测试的效率与工具使用熟练度直接挂钩&#xff0c;除了基础的Metasploit、SQLMap&#xff0c;还有众多工具的进阶功能的能大幅提升漏洞挖掘效率。本文聚焦渗透测试中高频使用的4款工具&#xff0c;分享实用进阶技巧&#xff0c;帮助从业者摆脱“只会基础命令”的瓶颈。…

cuda 中__restrict__作用

你想了解 CUDA 中 __restrict__ 的作用,这个关键字本质是编译器优化提示,核心目的是帮 GPU 编译器生成更高效的代码,同时也能避免内存别名(aliasing)导致的错误或性能损失。我会从“是什么、为什么有用、怎么用、…

CUDA的最新稳定版本是13.1

截至2026年1月&#xff0c;CUDA的最新稳定版本是13.1&#xff08;发布于2025年12月&#xff09;&#xff0c;这是NVIDIA自2006年CUDA诞生以来最大规模的一次更新&#xff0c;引入了革命性的编程范式变革。以下是该版本的核心特性介绍&#xff1a; 一、核心更新概览 版本信息 …

修改归档模式

[root@xyrtddb03 patroni]# cat patroni.yml scope: pgsql16 namespace: /pgsql01/ name: pg03restapi:listen: 0.0.0.0:8008connect_address: 10.40.2.43:8008etcd3:hosts: 10.40.2.41:2379,10.40.2.42:2379,10.40.2…

2026山东最新数据资产评估机构top5推荐!潍坊等地专业数据资产评估公司权威榜单发布,资质技术双优助力价值评估.

数字经济时代,数据资产作为新型生产要素的价值日益凸显,企业对数据资产评估的专业性、合规性与技术深度需求显著提升。但行业存在资质参差不齐、评估方法不统一等问题,制约数据价值的有效释放。据中国资产评估协会最…

详细介绍:Docker:Docker image常用命令使用及实操

详细介绍:Docker:Docker image常用命令使用及实操2026-01-23 15:42 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displ…

IntelliJ IDEA 2026.1 EAP 发布!拥抱 Java 26,Spring Boot 4 深度支持!

IntelliJ IDEA 2026.1 EAP 发布!拥抱 Java 26,Spring Boot 4 深度支持!大家好,我是 Guide。这是真迅速啊!JetBrains 已经正式发布 IntelliJ IDEA 2026.1 EAP(Early Access Program)首个版本。作为一个面向下一代…

2026年316L不锈钢板厂家推荐报告:第三方视角下的优质供应商评估及选择指南

2026年316L不锈钢板厂家推荐报告:第三方视角下的优质供应商评估及选择指南 一、引言 根据2025年《中国不锈钢行业发展白皮书》显示,随着化工、核电、海洋工程等高端行业对耐蚀材料需求的增长,316L不锈钢板市场规模同…

2025年非遗膏方厂家口碑排行:消费者信赖的品牌,阿胶糕/阿胶类产品/膏方类产品/阿胶/阿胶类/膏方/非遗膏方非遗膏方定制口碑推荐

随着健康消费观念的升级,承载着千年中医药智慧的膏方,正以“非遗”之姿焕发新生,成为大健康产业中备受瞩目的品类。市场繁荣的背后,是消费者对产品品质、文化底蕴与品牌信誉的日益看重。为厘清行业格局,助力消费者…