​LeetCode解法汇总1091. 二进制矩阵中的最短路径

news2024/12/22 11:11:01

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。

二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(n - 1, n - 1))的路径,该路径同时满足下述要求:

  • 路径途经的所有单元格都的值都是 0 。
  • 路径中所有相邻的单元格应当在 8 个方向之一 上连通(即,相邻两单元之间彼此不同且共享一条边或者一个角)。

畅通路径的长度 是该路径途经的单元格总数。

示例 1:

输入:grid = [[0,1],[1,0]]
输出:2

示例 2:

输入:grid = [[0,0,0],[1,1,0],[1,1,0]]
输出:4

示例 3:

输入:grid = [[1,0,0],[1,1,0],[1,1,0]]
输出:-1

提示:

  • n == grid.length
  • n == grid[i].length
  • 1 <= n <= 100
  • grid[i][j] 为 0 或 1

解题思路:

* 解题思路:
* 从尾节点开始,先找到所有走一步可以达到的节点,放入集合list。
* 然后在从list集合中的节点触发,找到所有可能达到的节点,这些节点就是2步可以达到的,就这样遍历下去。
* 最终遍历到头节点时,流程结束。

代码:

#include <iostream>
#include <map>
#include <list>
#include <vector>
#include <map>
#include "Solution1091.h"

using namespace std;
vector<vector<int>> directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}, {-1, 1}, {1, 1}, {1, -1}, {-1, -1}};

int searchGrid(vector<vector<int>> &from, vector<vector<int>> &grid, int step)
{
    vector<vector<int>> to;
    for (vector<int> node : from)
    {
        int y = node[0];
        int x = node[1];
        for (vector<int> direction : directions)
        {
            int newX = x + direction[1];
            int newY = y + direction[0];
            if (newX < 0 || newY < 0 || newX >= grid[0].size() || newY >= grid.size())
            {
                continue;
            }
            if (grid[newY][newX] != 0)
            {
                continue;
            }
            if (newY == 0 && newX == 0)
            {
                return step;
            }
            grid[newY][newX] = step;
            to.push_back(vector<int>{newY, newX});
        }
    }
    if (to.size() == 0)
    {
        return 1;
    }
    return searchGrid(to, grid, step - 1);
}

int Solution1091::shortestPathBinaryMatrix(vector<vector<int>> &grid)
{
    if (grid[0][0] == 1 || grid[grid.size() - 1][grid[0].size() - 1] == 1)
    {
        return -1;
    }
    if (grid.size() == 1 && grid[0].size() == 1)
    {
        return 1;
    }
    vector<vector<int>> from;
    int gridSizeY = grid.size() - 1;
    int gridSizeX = grid[0].size() - 1;
    from.push_back(vector<int>{gridSizeY, gridSizeX});
    int i = searchGrid(from, grid, -1);
    if (i == 1)
    {
        return -1;
    }
    return i * -1 + 1;
}

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

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

相关文章

修改优美移动端中间的老师的轮播图

副标题在高级内容那&#xff0c;如果缩略图上传不上去。那就是改一下图片名字&#xff0c;多刷新几次试试

Java程序设计入门教程--整数类型

举例 int x123; //指定变量x为int型&#xff0c;且赋初值为123 byte b8; //指定变量b为byte型&#xff0c;且赋初值为8 short s10; //指定变量s为short型&#xff0c;且赋初值为10 long y123L,z123l; //指定变量y,z为long型&#xff0c;且分别赋初值为123 示例代…

公文写作素材:为人处世类过渡句50例

1.身处逆境&#xff0c;敢于亮剑&#xff0c;坚毅前行&#xff0c;方能逆势突围&#xff1b;面对困难&#xff0c;坚定信心&#xff0c;敢拼敢闯&#xff0c;定能笑到最后。 2.没有海纳百川的胸怀&#xff0c;怎能容得下不同性格的人&#xff1b;没有从善如流的雅量&#xff0…

Python中处理无效数据的详细教程(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

云原生之深入解析Kubernetes的网络模型

一、前言 Kubernetes 是为运行分布式集群而建立的&#xff0c;分布式系统的本质使得网络成为 Kubernetes 的核心和必要组成部分&#xff0c;了解 Kubernetes 网络模型可以使你能够正确运行、监控和排查应用程序故障。网络所涉及的内容很多&#xff0c;拥有许多成熟的技术。对于…

chatgpt赋能python:Python做GUI:介绍与优化SEO

Python做GUI&#xff1a;介绍与优化SEO Python是一种受欢迎的编程语言&#xff0c;尤其是在数据分析和开发领域。但是&#xff0c;Python也可以用于GUI&#xff08;图形用户界面&#xff09;应用程序的开发。在本文中&#xff0c;我们将介绍Python GUI开发的基础知识&#xff…

滤镜美颜sdk的实现方式和工作流程:从技术层面了解美颜算法

众所周知&#xff0c;实现美颜功能的核心技术之一就是滤镜美颜sdk。在本文中&#xff0c;我们将从技术层面来探讨滤镜美颜sdk的实现方式和工作流程&#xff0c;帮助读者更深入了解美颜算法。 一、美颜算法的基本原理 美颜算法的基本原理是通过图像处理技术&#xff0c;对人物…

第十八章_Redis缓存预热+缓存雪崩+缓存击穿+缓存穿透

缓存预热 缓存预热就是系统启动前&#xff0c;提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候&#xff0c;先查询数据库&#xff0c;然后再将数据缓存的问题&#xff01;用户直接查询事先被预热的缓存数据。 可以通过PostConstruct初始化白名单数据 缓存雪崩 …

23种设计模式之命令模式(Command Pattern)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将23种设计模式中的命令模式&#xff0c;此篇文章为一天学习一个设计模式系列文章&#xff0c;后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬不…

CASIA-FaceV5 抠出的人脸数据集

CASIA-FaceV5亚洲人脸数据集&#xff0c;以该数据集作为测试集所生成的同一人和不同人对应的测试文件。 CASIA-FaceV5亚洲人脸数据集有500人、每个人5张图片&#xff0c;共2500张图片&#xff0c;图片大小为640*480。数据集共有500个文件夹&#xff0c;文件夹名称为&#xff1…

【实战记录】手游内存优化(内存泄露检测)

故事背景&#xff1a; 手上有一个完整的页游项目&#xff0c;线上运营数据还不错&#xff0c;所以打算把这个项目手游化。因为这个项目本来就是用cocos的creator写的&#xff0c;所以手游化成本比较低&#xff0c;在修改了大概6~7个只能在页游上运行的接口后&#xff0…

Ansible介绍

文章目录 Ansible介绍Ansible的架构为什么要有Ansible TowerAnsible Tower Ansible介绍 Ansible是一种自动化工具&#xff0c;可以用于自动化部署、配置和管理IT基础设施。它是一种基于Python的开源软件&#xff0c;提供了一个简单易用的语言和工具集&#xff0c;使得自动化管…

内网渗透—代理Socks协议、路由不出网、SMB绕过、CS-MSF控制上线

内网渗透—代理Socks协议、路由不出网、SMB绕过、CS-MSF控制上线 1. 前言1.1. 实验背景1.2. 环境准备1.2.1. 环境介绍1.2.2. 环境测试 2. CS上线2.1. Windows2008上线2.2. Windows2003上线2.2.1. 设置socks代理2.2.2. 设置正向连接2.2.3. 生成木马2.2.4. 上线木马 2.3. Windows…

Flutter数据库操作看这一篇就够了

文章目录 Flutter常用数据库操作库最常用的sqflite介绍简介举例 依赖sqflite,单例模式封装一个sqlite操作类说明initDb说明conflictAlgorithm说明 Flutter常用数据库操作库 Flutter是一种跨平台的移动应用程序开发框架&#xff0c;支持使用多种类型的数据库进行数据存储和管理…

【CSDN快速获得铁粉小经验】厉昱辰的经验分享

如何快速的涨粉呢&#xff1f;今天将带领大家一起涨粉喽&#x1f970;&#x1f970;&#x1f973;&#x1f973; 一、最低阅读量过滤 官方算法进行最低阅读量过滤&#xff0c;阅读量太低的直接不参与热榜计算&#xff0c;刚创建的文章应该在其他渠道有一些冷启动的过程。但是阅…

c++ 11标准模板(STL) std::map(四)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

150套开发板免费送!还有5G手机拿?米尔RZ/G2L开发板创意秀

人间最美五月天 不负韶华不负卿 米尔又来送板子了 不是3套&#xff0c;也不是4套 150套米尔RZ/G2L开发板 送&#xff01;免费&#xff01;板卡不回收&#xff01; 这是什么样的有奖活动&#xff1f; 米尔RZ/G2L开发板创意秀 为感谢广大客户一直以来的支持&#xff0c;推动…

15 个非常流行的VsCode插件,让你的编码效率倍增!

VS Code已经成为了最受欢迎的代码编辑器之一。 它的简洁性、易用性和可扩展性使得它成为了许多开发者的首选。 而在VS Code中&#xff0c;插件是其最大的卖点之一。 通过安装插件&#xff0c;你可以将VS Code打造成一个功能强大的开发环境&#xff0c;从而提高你的编码效率。…

【2023A题】电采暖负荷参与电力系统功率调节的技术经济分析(思路、代码)

目录 &#x1f4a5;1 概述 &#x1f4da;2 Matlab代码实现 &#x1f389;3 参考文献 &#x1f308;4 运行结果 &#x1f4a5;1 概述 建设以新能源为主体的新型电力系统是应对全球气候变化挑战的重要举措。高比例新能源接入导致电力系统调节能力稀缺&#xff0c;亟需开发新的调…

Node版本管理器nvm的安装与使用

前言&#xff1a; 多项目新旧项目管理的时候&#xff0c;往往与依赖不同的node版本&#xff0c;不同的版本对其他依赖的安装有一定的影响&#xff0c;因此我们需要对node的版本进行方便快捷管理和切换&#xff0c;如果直接卸载重装对应版本&#xff0c;切换项目再次卸载重装明显…