LC1091:二进制矩阵中的最短路径

1091 二进制矩阵中的最短路径

这道题做起来还挺顺利的,挺常见的套路求最短路径,因为做的时候没有卡住就做完了,不过要注意特殊用例的判断,以下是AC代码:

class Solution {// Dimensions of the gridint n, m;
​// Inner class to represent a cell in the grid with its coordinates and distance from the startclass pair {int x, y;int dis;
​public pair(int x, int y, int dis) {this.x = x;this.y = y;this.dis = dis;}}
​public int shortestPathBinaryMatrix(int[][] grid) {// Check if the starting cell is blockedif (grid[0][0] == 1) return -1;
​// Initialize dimensionsn = grid.length;m = grid[0].length;
​// If the grid is 1x1 and the only cell is open, return 1if (n * m == 1 && grid[0][0] == 0) return 1;
​// Queue for BFSArrayDeque<pair> aq = new ArrayDeque<>();
​// Visited array to keep track of visited cellsboolean[][] st = new boolean[n + 1][m + 1];
​// Start BFS from the top-left cellaq.offer(new pair(0, 0, 1));
​while (!aq.isEmpty()) {pair p = aq.poll();int x = p.x;int y = p.y;int dis = p.dis;
​// Iterate through all 8 possible directionsfor (int i = -1; i <= 1; i++) {for (int j = -1; j <= 1; j++) {int nx = x + i;int ny = y + j;
​// Check if the new cell is within bounds, not blocked, and not visitedif (!isLegal(nx, ny) || grid[nx][ny] == 1 || st[nx][ny]) continue;
​// If we reach the bottom-right cell, return the distanceif (nx == n - 1 && ny == m - 1) return dis + 1;
​// Mark the cell as visited and add it to the queuest[nx][ny] = true;aq.offer(new pair(nx, ny, dis + 1));}}}
​// If there is no path to the bottom-right cell, return -1return -1;}
​// Helper function to check if a cell is within the bounds of the gridpublic boolean isLegal(int x, int y) {return x >= 0 && y >= 0 && x < n && y < m;}
}
​

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

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

相关文章

资治通鉴(二)

今天是6月15日&#xff0c;大约两个月的时间里我看完了《资治通鉴&#xff08;二&#xff09;》&#xff0c;回顾一下这本书主要讲了哪些帝王的故事。 汉武帝刘彻&#xff0c;公元前141年至前87年在位54年&#xff0c;他加强了中央集权&#xff0c;尊崇儒术&#xff0c;开创了丝…

AI Agents 的五个级别

原文地址:https://cobusgreyling.medium.com/five-levels-of-ai-agents-5ac39a7b07ed AI Agents 被定义为能够感知环境、做出决策并根据可用工具采取行动的人工实体。 2024 年 5 月 16 日 介绍 这是我非常喜欢研究的一个主题,我很期待写这篇文章。主要是因为我想揭开代理的概…

fetch_lfw_people()报错urllib.error.HTTPError: HTTP Error 403: Forbidden的解决方案

零、实验报告地址 计算机视觉实验二:基于支持向量机和随机森林的分类(Part one: 编程实现基于支持向量机的人脸识别分类 )-CSDN博客 一、代码报错 fetch_lfw_people()报错urllib.error.HTTPError: HTTP Error 403: Forbidden 二、报错原因 通常是由于访问权限不足导致的…

Mysql中索引详解

1、什么是索引 在日常学习中&#xff0c;最常见使用索引的例子就是词典&#xff0c;通过对字母进行排序&#xff0c;并设置对应的页数&#xff0c;从而循序定位某个单词&#xff0c;除了词典&#xff0c;如火车站的车次表、图书的目录等都是使用了索引。它们的原理都是一样的&…

C++11参数包...Args

以list中的包装器做介绍 包装器是由一个类模板接收后存储在统一的...Args中 标准格式 说明&#xff1a;...Args就是参数包的类型 实例&#xff1a; //参数包 void Show() {cout <<"结束" << endl; }template<class T,class ...Args> void Show(T…

RocketMq多环境自动隔离

一、多环境隔离场景 当多个环境使用同一套rocketmq的服务的时候&#xff0c;如果不对环境进行隔离&#xff0c;将会导致消息被错误的环境消费&#xff0c;因此可以采用两种方式进行隔离。 方式1 通过$Value注入&#xff0c;但是这个需要每个环境都维护自己的topic等信…

LabVIEW与C#的区别及重新开发自动测试程序的可行性分析

LabVIEW和C#是两种广泛使用的编程语言&#xff0c;各自有不同的应用领域和特点。本文将详细比较LabVIEW与C#在自动测试程序开发中的区别&#xff0c;并分析将已完成的LabVIEW自动测试程序重新用C#开发的合理性。本文帮助评估这种转换的必要性和潜在影响。 LabVIEW与C#的区别 开…

C++编程:vector容器的简单模拟实现

前言&#xff1a; 在C标准库&#xff08;STL&#xff09;中&#xff0c;vector容器是最常见使用的动态数组。它结合了链表与数组的优点&#xff0c;提供了灵活的大小调整与高效的随机访问。本文将简单的对vector容器进行介绍并且对vector容器简单的模拟实现。 一、vector的文…

Mybatis的面试题

1. 什么是一级缓存什么是二级缓存&#xff1f; MyBatis是一款优秀的持久层框架&#xff0c;它提供了一级缓存和二级缓存来提高数据库访问性能。 一级缓存 一级缓存是指在同一个SqlSession中进行的缓存。当MyBatis执行查询时&#xff0c;查询结果会被缓存在SqlSession的内存中…

uniapp实现路由拦截——实战案例(二)

uniapp如何实现登录路由拦截&#xff1f; 今天再次介绍一下 uni-simple-router 插件&#xff0c;记得最初使用时&#xff0c;是在三年以前了&#xff0c;这里简单介绍通过自动读取 pages.json 作为路由表的方式&#xff0c;欢迎指教~ 文章目录 uniapp如何实现登录路由拦截&…

LangChain入门学习笔记(二)——LangChain表达式语言(LCEL)

基于LangChain框架编写大模型应用的过程就像垒积木&#xff0c;其中的积木就是Prompts&#xff0c;LLMs和各种OutputParser等。如何将这些积木组织起来&#xff0c;除了使用基本Python语法调用对应类的方法&#xff0c;一种更灵活的方法就是使用位于LangChain-Core层中的LCEL&a…

SwiftUI 6.0(Xcode 16)全新 @Entry 和 @Previewable 宏让开发妙趣横生

概览 如火如荼的 WWDC 2024 已进入第五天&#xff0c;苹果开发平台中众多海量新功能都争先恐后的喷薄欲出。 在这里就让我们从中挑两个轻松有趣的新功能展示给小伙伴们吧&#xff1a;它们分别是 全新的 Entry 和 Previewable 宏。 在本篇博文中&#xff0c;您将学到如下内容&a…

dayjs将星期的第一天设置为周一

默认引入的dayjs的语言是英文&#xff0c;一周的开始是星期日&#xff0c;当使用dayjs().startOf(week)的时候&#xff0c;就不是周一而是周日了。 import dayjs from "dayjs" import "dayjs/locale/zh-cn" import updateLocale from "dayjs/plugin/…

【Python】 探索 CatBoost:高效的机器学习分类与回归工具

我们都找到天使了 说好了 心事不能偷藏着 什么都 一起做 幸福得 没话说 把坏脾气变成了好沟通 我们都找到天使了 约好了 负责对方的快乐 阳光下 的山坡 你素描 的以后 怎么抄袭我脑袋 想的 &#x1f3b5; 薛凯琪《找到天使了》 在机器学习领域中&#xff…

【C++ 11 新特性】lambda 表达式详解

文章目录 1. 常见 lambda 面试题&#x1f58a; 1. 常见 lambda 面试题&#x1f58a; &#x1f34e;① 如果⼀个 lambda 表达式作为参数传递给⼀个函数&#xff0c;那这个函数可以使⽤这个 lambda 表达式捕获的变量吗 ? &#x1f427; 函数本身无法直接访问到 lambda表达式捕获…

vue3实现表格的分页以及确认消息弹窗

表格的分页实例展示 效果1:表格按照每行10条数据分页,且编号也会随之分页自增 实现按照页码分页效果 第二页 展示编号根据分页自动增长 固定表格高度 这边设置了滚动条,同时表格高度实现自适应滚动条高度 template部分 表格代码 编号是按照页码条数进行循环并根据索引自增…

力扣191. 位1的个数

Problem: 191. 位1的个数 文章目录 题目描述思路复杂度Code 题目描述 思路 题目规定数值的范围不会超过32位整形数 1.定义统计个数的变量oneCount&#xff1b;由于每次与给定数字求与的变量mask初始化为1 2.for循环从0~32&#xff0c;每一次拿mask与给定数字求与运算&#xff…

【Linux应用】Linux系统的设备管理——Udev

1.udev概述 udev是 Linux2.6内核里的一个功能&#xff0c;它替代了原来的 devfs&#xff0c;成为当前 Linux 默认的设备管理工具&#xff0c;能够根据系统中的硬件设备的状态动态更新设备文件&#xff0c;包括设备文件的创建&#xff0c;删除等。 udev以守护进程的形式运行&am…

YOLOv10的使用总结

目录 YOLOv10介绍 部署和使用示例 微调训练 YOLO模型因其在计算成本和检测性能之间的平衡而在实时目标检测中很受欢迎。前几天YOLOv10也刚刚发布了。我们这篇文章就来看看YOLOv10有哪些改进&#xff0c;如何部署&#xff0c;以及微调。 概述 实时物体检测旨在以较低的延迟准…

JC/T 2653-2022 不发火砂浆检测

不发火砂浆是指当材料与金属等坚硬物发生摩擦、冲击或冲擦等机械作用时&#xff0c;不产生火花或火星的砂浆。 JC/T 2653-2022 不发火砂浆检测项目&#xff1a; 测试项目 测试方法 外观 JC/T 2653 抗压强度 GB/T 17671 抗折强度 GB/T 17671 保水率 JGJ/T 70 凝结时间…