首页/新闻资讯/正文详情

leetcode 2812. 找出最安全路径 中等

发布时间:2026/9/24 19:56:38 来源:云帆数科 栏目:资讯中心
leetcode 2812. 找出最安全路径 中等
给你一个下标从0开始、大小为n x n的二维矩阵grid其中(r, c)表示如果grid[r][c] 1则表示一个存在小偷的单元格如果grid[r][c] 0则表示一个空单元格你最开始位于单元格(0, 0)。在一步移动中你可以移动到矩阵中的任一相邻单元格包括存在小偷的单元格。矩阵中路径的安全系数定义为从路径中任一单元格到矩阵中任一小偷所在单元格的最小曼哈顿距离。返回所有通向单元格(n - 1, n - 1)的路径中的最大安全系数。单元格(r, c)的某个相邻单元格是指在矩阵中存在的(r, c 1)、(r, c - 1)、(r 1, c)和(r - 1, c)之一。两个单元格(a, b)和(x, y)之间的曼哈顿距离等于| a - x | | b - y |其中|val|表示val的绝对值。示例 1输入grid [[1,0,0],[0,0,0],[0,0,1]]输出0解释从 (0, 0) 到 (n - 1, n - 1) 的每条路径都经过存在小偷的单元格 (0, 0) 和 (n - 1, n - 1) 。示例 2输入grid [[0,0,1],[0,0,0],[0,0,0]]输出2解释上图所示路径的安全系数为 2 - 该路径上距离小偷所在单元格02最近的单元格是00。它们之间的曼哈顿距离为 | 0 - 0 | | 0 - 2 | 2 。 可以证明不存在安全系数更高的其他路径。示例 3输入grid [[0,0,0,1],[0,0,0,0],[0,0,0,0],[1,0,0,0]]输出2解释上图所示路径的安全系数为 2 - 该路径上距离小偷所在单元格03最近的单元格是12。它们之间的曼哈顿距离为 | 0 - 1 | | 3 - 2 | 2 。 - 该路径上距离小偷所在单元格30最近的单元格是32。它们之间的曼哈顿距离为 | 3 - 3 | | 0 - 2 | 2 。 可以证明不存在安全系数更高的其他路径。提示1 grid.length n 400grid[i].length ngrid[i][j]为0或1grid至少存在一个小偷分析题目要求找出从起点 (0,0) 到终点 (n−1,n−1) 的路径中的最大安全系数。安全系数定义为从起点到终点路径上的任意单元格到任意有小偷的单元格的最小曼哈顿距离。由于路径必然包含起点和终点因此如果这两个单元格中任意一个存在小偷最小曼哈顿距离即为 0此时最大安全系数也为 0。另外矩阵中至少有一个小偷无论小偷位于何处起点到终点路径上任意单元格到小偷的曼哈顿距离都不会超过 n。最大化路径的安全系数等价于最大化路径上所有单元格到小偷的最小曼哈顿距离的最小值。如果事先计算出每个单元格到最近小偷的曼哈顿距离可以用一个 n×n 的二维数组记录那么原问题就转换为在二维矩阵中从起点 (0,0) 走到终点 (n−1,n−1)找出一条路径最大化路径上节点值的最小值。首先使用多源 BFS 来求出所有单元格到小偷单元格的最小曼哈顿距离将所有小偷的位置作为源点同时入队进行广度优先搜索用二维数组 dis 记录结果其中 dis[x][y] 表示位置 (x,y) 到最近小偷的曼哈顿距离。接下来可以从起点开始进行深度优先搜索或广度优先搜索只允许经过值大于等于 limit 的节点搜索结束后判断是否能抵达终点。因为随着 limit 减小原本可行的路径依然可行所以答案具有单调性。于是我们可以用二分查找来寻找满足条件的最大 limit记为 ans满足当 limit≤ans 时可以从起点走到终点当 limitans 时则无法到达终点。另外路径必然包含起点和终点因此二分查找的上界不会超过 min(dis[0][0],dis[n−1][n−1])。在区间 [0,min(dis[0][0],dis[n−1][n−1])] 上进行二分查找即可得到最终的答案。class Solution { public: int maximumSafenessFactor(vectorvectorint grid) { int ngrid.size(),dist[n][n]; if(grid[0][0]1||grid[n-1][n-1]1)return 0; queuepairint,intque; int x[]{-1,1,0,0},y[]{0,0,-1,1}; for(int i0;in;i) { for(int j0;jn;j) { dist[i][j]INT_MAX; if(grid[i][j]1) que.push({i,j}),dist[i][j]0; } } int left0,rightINT_MIN,mid; while(!que.empty()) { int xxque.front().first,yyque.front().second;que.pop(); rightmax(dist[xx][yy]1,right); for(int i0;i4;i) { int temp_xxxxx[i],temp_yyyyy[i]; if(temp_xx0||temp_xxn||temp_yy0||temp_yyn)continue; if(dist[xx][yy]1dist[temp_xx][temp_yy]) dist[temp_xx][temp_yy]dist[xx][yy]1,que.push({temp_xx,temp_yy}); } } int ans0; while(leftright) { int f0;mid(leftright)/2; queuepairint,inttemp_que; mappairint,int,intmp; if(dist[0][0]mid)temp_que.push({0,0}); while(!temp_que.empty()!f) { int xxtemp_que.front().first,yytemp_que.front().second;temp_que.pop(); // printf(xx%d yy%d dis%d mid%d\n,xx,yy,dist[xx][yy],mid); for(int i0;i4!f;i) { int temp_xxxxx[i],temp_yyyyy[i]; if(temp_xx0||temp_xxn||temp_yy0||temp_yyn)continue; // printf(temp_xx%d temp_yy%d dis%d mid%d\n,temp_xx,temp_yy,dist[temp_xx][temp_yy],mid); if(dist[temp_xx][temp_yy]midmp[{temp_xx,temp_yy}]0) { if(temp_xxn-1temp_yyn-1)f1; temp_que.push({temp_xx,temp_yy});mp[{temp_xx,temp_yy}]1; } } } if(f)ansmax(ans,mid),leftmid1; else rightmid; // printf(f%d ans%d left%d right%d\n,f,ans,left,right); } return ans; } };

相关推荐

老打印机遇上Windows 11:HP M1136驱动安装卡住解决方法
老打印机遇上Windows 11:HP M1136驱动安装卡住解决方法

如果你手上那台服役多年的 HP LaserJet M1136 MFP,在换到 Windows 11 后第一次插上 USB 线就卡在“新设备已连接”的提示上,你大概能体会那种哭笑不得的感觉。打印机明明通电正常、自检顺畅,电脑右下角也弹出了那个熟悉的横幅,但接… · 2026/9/24 19:56:31

AI编程助手三大范式:Copilot、Claude Code与Cursor能力图谱
AI编程助手三大范式:Copilot、Claude Code与Cursor能力图谱

1. 为什么现在必须重新理解“AI编程助手”——不是工具升级,而是开发范式迁移我第一次在团队里推开那扇门,是2023年6月。当时我们正为一个遗留系统做接口重构,三个后端同学卡在Swagger定义与Spring Boot Controller签名不一致的问题上&#x… · 2026/9/24 19:56:23

智慧能源双碳云平台落地指南:从数据采集到施工验收
智慧能源双碳云平台落地指南:从数据采集到施工验收

简介:一份面向电力、石油、化工、钢铁等高耗能行业的智慧能源双碳云平台完整解决方案文档,可帮助企业规划能源数字化建设与碳管理路径,也可为政府推进碳排放监管提供参考。方案围绕碳排放监测与核算、碳资产管理、能源管理、智能能源交易、数… · 2026/9/24 19:56:23

操作系统实验包全解析:进程调度、内存管理与文件系统模拟
操作系统实验包全解析:进程调度、内存管理与文件系统模拟

简介:这份面向西南科技大学计算机相关专业学生的操作系统实验资源包,涵盖进程管理、内存管理、文件管理三大核心模块,适合初学操作系统课程、需要完成配套上机实验的本科生使用。压缩包共10个文件,以C/C源代码(.cpp/.c… · 2026/9/24 20:27:12

C# WinForm排队叫号系统实战:号池、多窗体通信与TCP广播
C# WinForm排队叫号系统实战:号池、多窗体通信与TCP广播

简介:基于C#(WinForm)开发的排队叫号系统项目,覆盖智能排队全流程:预约、取号、微信取号、绿色通道、服务评价与数据统计分析,并整合取号端、软件/硬件叫号器、LED条屏端、综合显示屏端、消息服务端及语音端… · 2026/9/24 20:27:12

从单Agent到Agent Team:Paseo编排与Beads状态管理实战
从单Agent到Agent Team:Paseo编排与Beads状态管理实战

前一篇把骨架立起来之后,项目停更了一段时间。原因很简单:跑通 Demo 只是第一步,真正让我卡住的是“单 Agent 能干活,但一堆 Agent 在一起反而互相捣乱”这个尴尬局面。这篇主要记录我从单 Agent 原型切到 Paseo 做编排、用 Beads… · 2026/9/24 20:27:12

DeepSeek Harness 本地 Coding Agent 实战:从零生成井字棋游戏
DeepSeek Harness 本地 Coding Agent 实战:从零生成井字棋游戏

如果你最近也在折腾本地跑代码生成模型,应该会注意到一个趋势:大家已经不满足于把模型当聊天窗口用,而是开始把模型组织成能干活、能读代码、能改文件的 Coding Agent。我这两周正好把 DeepSeek Harness 拉起来做了一轮实战,用它的… · 2026/9/24 20:27:06

从块存储到对象存储:分布式存储架构与选型实践指南
从块存储到对象存储:分布式存储架构与选型实践指南

1. 存储类型全景解读:块存储、文件存储与对象存储1.1 三种存储类型到底差在哪里很多人一接触数据存储就先被概念劝退了。什么块存储、文件存储、对象存储,听着像三个完全不相干的东西,其实用生活里的场景一对比就特别清楚了。块存储就好比给你… · 2026/9/24 20:26:53

AI辅助微服务拆分实战:四套提示词与避坑指南
AI辅助微服务拆分实战:四套提示词与避坑指南

干了十几年架构,我最怕的不是新技术学不会,而是那种“看起来什么都能跑、一改需求就全线崩溃”的遗留系统。去年公司启动核心业务中台重构,二十多个业务模块、三百多张表、四个后端团队同时维护,我第一次尝试用 AI 来辅助微服务划… · 2026/9/24 20:26:53

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码