【LeetCode每日一题】【BFS模版与例题】【二维数组】1293. 网格中的最短路径

news2024/11/27 12:54:51

BFS基本模版与案例可以参考:

【LeetCode每日一题】【BFS模版与例题】863.二叉树中所有距离为 K 的结点
【LeetCode每日一题】【BFS模版与例题】【二维数组】130被围绕的区域 && 994 腐烂的橘子

在这里插入图片描述

思路:

  • 特殊情况:
    最短的路径是向下再向右,在这条路径上最多有经过row+col-1个位置,除去起点、终点,最多可以有row+col-3个阻碍,如果k>=row+col-3 ,则证明说,走最短路径,即使有row+col-3个阻碍,也都能移除。

  • 对于不考虑可以越过障碍物的常规情况,经过的每一个点都可以用【x,y】来表示,无论走那一条路径经过该点,都可以用【x,y】表示。

  • 对于此题,点坐标【x,y】不足以与表示一个点的情况:显然即使在同一位置上,可以越过障碍的剩余机会数目也会决定之后是否能走完、可以走的最短路径等信息,所以需要【x,y,rest】三元组来与当前状态一一对应。比如下图,k = 1 的情况,在【2,0】这个位置,通过橙色路线经过时,已经无法到达终点,但是通过绿色路线经过时仍然可以到达终点。因此,【2,0】这个位置还需要记录当前剩余的特权次数!
    图片来源:https://leetcode.cn/problems/shortest-path-in-a-grid-with-obstacles-elimination/solutions/1740488/tu-jie-by-zhug-4-cst1/
    图片来源:添加链接描述

var shortestPath = function (grid, k) {
  let row = grid.length
  let col = grid[0].length

  // 特殊情况1:
  if(row === 1 && col === 1) return 0

// 特殊情况2:最短的路径是row-1+col-1,在这条路径上最多有经过row+col-1个位置,除去起点、终点,最多可以有row+col-3个阻碍
  if (k >= row + col - 3) {
    return row + col - 2
  }

  let step = 0
  let queue = [[0, 0, k]]
  let visited = new Set()
  visited.add(`${0},${0},${k}`)

  while (queue.length) {
    let size = queue.length
    step++
    for (let i = 0; i < size; i++) {
      let [x, y, remainder] = queue.shift()

		// 上下左右
      const distance = [
        [-1, 0],
        [1, 0],
        [0, -1],
        [0, 1]
      ]
	
	// 遍历临近的节点
      for (let j = 0; j < distance.length; j++) {
        const [dx, dy] = distance[j]
        let nextX = dx + x
        let nextY = dy + y
        
        if (nextX < 0 || nextX >= row || nextY < 0 || nextY >= col) {
          continue
        }

        if (
          grid[nextX][nextY] === 0 &&
          !visited.has(`${nextX},${nextY},${remainder}`)
        ) {
         // 满足条件时返回step
          if (nextX === row - 1 && nextY === col - 1) {
            return step
          }
          queue.push([nextX, nextY, remainder])
          visited.add(`${nextX},${nextY},${remainder}`)
        }

        if (
          grid[nextX][nextY] === 1 &&
          remainder > 0 &&
          !visited.has(`${nextX},${nextY},${remainder - 1}`)
        ) {
          queue.push([nextX, nextY, remainder - 1])
          visited.add(`${nextX},${nextY},${remainder - 1}`)
        }
      }
    }
  }

  return -1
}

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

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

相关文章

云计算科学与工程实践指南--章节引言收集

云计算科学与工程实践指南–章节引言收集 //本文收集 【云计算科学与工程实践指南】 书中每一章节的引言。 我已厌倦了在一本书中阅读云的定义。难道你不失望吗&#xff1f;你正在阅读一个很好的故事&#xff0c;突然间作者必须停下来介绍云。谁在乎云是什么&#xff1f; 通…

#QT(TCP网络编程-服务端)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;编写一个tcp服务端 QTcpsever QTcpsocket 3.记录&#xff1a; (1)先搭建界面 &#xff08;2&#xff09;服务端代码 a. pro QT core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c1…

html实体字符,已拿offer入职

面试知识点 主要内容包括html&#xff0c;css&#xff0c;前端基础&#xff0c;前端核心&#xff0c;前端进阶&#xff0c;移动端开发&#xff0c;计算机基础&#xff0c;算法与数据结构&#xff0c;设计模式&#xff0c;项目等等。 html 1.浏览器页面有哪三层构成&#xff0c…

video视频播放

1.列表页面 <template><div><ul><li class"item" v-for"(item,index) in list" :key"index" click"turnPlay(item.videoUrl)"><img :src"item.img" alt""><div class"btn…

Go 简单设计和实现可扩展、高性能的泛型本地缓存

相信大家对于缓存这个词都不陌生&#xff0c;但凡追求高性能的业务场景&#xff0c;一般都会使用缓存&#xff0c;它可以提高数据的检索速度&#xff0c;减少数据库的压力。缓存大体分为两类&#xff1a;本地缓存和分布式缓存&#xff08;如 Redis&#xff09;。本地缓存适用于…

论文目录3:大模型时代(2023+)

1 instruction tuning & in context learning 论文名称来源主要内容Finetuned Language Models Are Zero-Shot Learners2021 机器学习笔记&#xff1a;李宏毅ChatGPT Finetune VS Prompt_UQI-LIUWJ的博客-CSDN博客 早期做instruction tuning的work MetaICL: Learning to …

CSS文本样式值,web前端开发资料

正文 什么是行内元素&#xff1f; display属性为inline的元素为行内元素&#xff0c;英文&#xff1a;inline element&#xff0c;其中文叫法有多种&#xff0c;如&#xff1a;内联元素、内嵌元素、行内元素、直进式元素等。 特点&#xff1a; 和其他元素都在一行上&#x…

补点基础——几何尺寸和公差

几何尺寸与公差&#xff08;Geometric dimensioning and tolerancing&#xff09;代号&#xff1a;GD&T&#xff0c;主要是以下两个组织制定&#xff1a; 1.美国机械工程师学会&#xff08;ASME&#xff09; ASME Y14.5 是 GD & T 的完整定义&#xff0c;其中包含所有…

mac报错:zsh:command not found: brew

1、基本概述&#xff1f; 在使用brew安装程序的时候MAC提示&#xff1a; zsh:command not found: brew 本质就是brew没有安装&#xff0c;这个命令与linux系统中的yum命令类似。 使用的环境说明&#xff1a; 虚拟机版本&#xff1a;VMware Workstation 17 Pro mac os Ventu…

基于ERNIR3.0文本分类的开发实践

参考&#xff1a;基于ERNIR3.0文本分类&#xff1a;(KUAKE-QIC)意图识别多分类(单标签) - 飞桨AI Studio星河社区 (baidu.com) https://zhuanlan.zhihu.com/p/574666812?utm_id0 遇到的问题&#xff1a;如下 采用paddleNLP下文本分类实例进行分类训练后发现 生成的模型分类不…

组基轨迹建模 GBTM的介绍与实现(Stata 或 R)

基本介绍 组基轨迹建模&#xff08;Group-Based Trajectory Modeling&#xff0c;GBTM&#xff09;&#xff08;旧名称&#xff1a;Semiparametric mixture model&#xff09; 历史&#xff1a;由DANIELS.NAGIN提出&#xff0c;发表文献《Analyzing Developmental Trajectori…

【软件架构的常用分类及建模方法】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱 简述概要 了解软件架构的常用分类及建模方法 知识图谱 1.1.2 软件架构的常用分类及建模方法 软件架构的常用分类 多年来&#xff0c;“架构”概念经过不断演化&#xff0c;目前已形成了满足不同用途的…

Meta AI最近推出的新模型,Searchformer

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

echarts柱状图可鼠标左击出现自定义弹框,右击隐藏弹框并阻止默认右击事件

每项x轴数据对应有两条柱图和一条阴影效果是学习其它博客得到的效果&#xff0c;这个是学习的原文链接&#xff1a;echarts两个合并柱体&#xff08;普通柱状图象形柱图&#xff09;共享一个柱体阴影 因为这次情况比较特殊&#xff0c;不仅需要自定义弹框内容&#xff0c;而且…

Python——与Matlab对应的Python版本

参考资料&#xff1a; Python——与Matlab对应的Python版本

Android高级工程师面试实战,三幅图给你弄懂EventBus核心原理

阿里技术一面-35min 自我介绍 Android 有没有遇到OOM问题(有遇到内存泄漏问题)Handler机制ThreadLocalActivity启动到加载View过程View绘制过程LinearLayout (wrap_content) & TextView (match_parent) 最终结果???OKHttp(1. 为什么选择它&#xff1f; 2. 性能了解不…

(C++练习)选择题+编程题

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 选择题 以下程序输出结果是什么&#xff08;&#xff09; class A{public:virtual void func(int val 1){ std::cout<<"A->"<< val <<std::endl;}virtual void test(){ func();}};class B…

CSS标准文档流与脱离文档流,爆推

面试题&#xff1a; Html 1&#xff0c;html语义化 2&#xff0c;meta viewport相关 3&#xff0c;canvas 相关 CSS 1&#xff0c;盒模型 1.1&#xff0c;ie盒模型算上border、padding及自身&#xff08;不算margin&#xff09;&#xff0c;标准的只算上自身窗体的大小 c…

【SQL】指定日期的产品价格(IFNULL函数)

题目描述 leetcode题目&#xff1a;指定日期的产品价格 思路 找出所有的产品的指定的日期的价格&#xff1b;若找不到某个产品的更改日期&#xff0c;则将该产品价格设置为10。 关键点&#xff1a; if没有16号的&#xff0c;怎么找到前一个日期的&#xff1f;> 日期小…

flutter弹窗输入,Android学习的三个终极问题及学习路线规划

题库非常全面包括&#xff1a; Android基础知识: 基本涵盖Android所有知识体系&#xff0c;四大组件&#xff0c;Fragment,WebView,事件分发&#xff0c;View绘制…Java基础知识&高阶知识点: 基础部分不谈了&#xff0c;高阶部分&#xff1a;泛型&#xff0c;反射&#xff…