news 2026/5/19 7:26:07

leetcode 1391. 检查网格中是否存在有效路径 中等

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode 1391. 检查网格中是否存在有效路径 中等

给你一个mxn的网格grid。网格里的每个单元都代表一条街道。grid[i][j]的街道可以是:

  • 1表示连接左单元格和右单元格的街道。
  • 2表示连接上单元格和下单元格的街道。
  • 3表示连接左单元格和下单元格的街道。
  • 4表示连接右单元格和下单元格的街道。
  • 5表示连接左单元格和上单元格的街道。
  • 6表示连接右单元格和上单元格的街道。

你最开始从左上角的单元格(0,0)开始出发,网格中的「有效路径」是指从左上方的单元格(0,0)开始、一直到右下方的(m-1,n-1)结束的路径。该路径必须只沿着街道走

注意:不能变更街道。

如果网格中存在有效的路径,则返回true,否则返回false

示例 1:

输入:grid = [[2,4,3],[6,5,2]]输出:true解释:如图所示,你可以从 (0, 0) 开始,访问网格中的所有单元格并到达 (m - 1, n - 1) 。

示例 2:

输入:grid = [[1,2,1],[1,2,1]]输出:false解释:如图所示,单元格 (0, 0) 上的街道没有与任何其他单元格上的街道相连,你只会停在 (0, 0) 处。

示例 3:

输入:grid = [[1,1,2]]输出:false解释:你会停在 (0, 1),而且无法到达 (0, 2) 。

示例 4:

输入:grid = [[1,1,1,1,1,1,3]]输出:true

示例 5:

输入:grid = [[2],[2],[2],[2],[2],[2],[6]]输出:true

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 300
  • 1 <= grid[i][j] <= 6

分析:从起点开始进行 BFS,用一个队列记录当前可以走到的街道位置,初始时队列里仅有起点的坐标位置。每次进行 BFS 时,检查队列头的坐标,根据它的街道形式,判断能否走到相邻的街和相邻的街道是否已经走到过,如果可以走到并且没有走过,则标记相邻街道已访问并入队,直到队列为空或者走到右下角。最后检查右下角是否走过,如果走过,返回 true,否则返回 false。

class Solution { public: bool hasValidPath(vector<vector<int>>& grid) { int x=0,y=0,f=1,m=grid.size(),n=grid[0].size(),flag[m+5][n+5]; for(int i=0;i<m;++i) for(int j=0;j<n;++j) flag[i][j]=0; stack<pair<int,int>>sta;sta.push({0,0}); while(!sta.empty()) { int xx=sta.top().first,yy=sta.top().second,f=0; flag[xx][yy]=1; if(grid[xx][yy]==1) { if(yy+1<n&&flag[xx][yy+1]==0&&(grid[xx][yy+1]==3||grid[xx][yy+1]==5||grid[xx][yy+1]==1)) sta.push({xx,yy+1}),f=1; if(yy-1>=0&&flag[xx][yy-1]==0&&(grid[xx][yy-1]==4||grid[xx][yy-1]==6||grid[xx][yy-1]==1)) sta.push({xx,yy-1}),f=1; } else if(grid[xx][yy]==2) { if(xx+1<m&&flag[xx+1][yy]==0&&(grid[xx+1][yy]==5||grid[xx+1][yy]==6||grid[xx+1][yy]==2)) sta.push({xx+1,yy}),f=1; if(xx-1>=0&&flag[xx-1][yy]==0&&(grid[xx-1][yy]==3||grid[xx-1][yy]==4||grid[xx-1][yy]==2)) sta.push({xx-1,yy}),f=1; } else if(grid[xx][yy]==3) { if(xx+1<m&&flag[xx+1][yy]==0&&(grid[xx+1][yy]==5||grid[xx+1][yy]==6||grid[xx+1][yy]==2)) sta.push({xx+1,yy}),f=1; if(yy-1>=0&&flag[xx][yy-1]==0&&(grid[xx][yy-1]==4||grid[xx][yy-1]==6||grid[xx][yy-1]==1)) sta.push({xx,yy-1}),f=1; } else if(grid[xx][yy]==4) { if(xx+1<m&&flag[xx+1][yy]==0&&(grid[xx+1][yy]==5||grid[xx+1][yy]==6||grid[xx+1][yy]==2)) sta.push({xx+1,yy}),f=1; if(yy+1<n&&flag[xx][yy+1]==0&&(grid[xx][yy+1]==3||grid[xx][yy+1]==5||grid[xx][yy+1]==1)) sta.push({xx,yy+1}),f=1; } else if(grid[xx][yy]==5) { if(xx-1>=0&&flag[xx-1][yy]==0&&(grid[xx-1][yy]==3||grid[xx-1][yy]==4||grid[xx-1][yy]==2)) sta.push({xx-1,yy}),f=1; if(yy-1>=0&&flag[xx][yy-1]==0&&(grid[xx][yy-1]==4||grid[xx][yy-1]==6||grid[xx][yy-1]==1)) sta.push({xx,yy-1}),f=1; } else if(grid[xx][yy]==6) { if(xx-1>=0&&flag[xx-1][yy]==0&&(grid[xx-1][yy]==3||grid[xx-1][yy]==4||grid[xx-1][yy]==2)) sta.push({xx-1,yy}),f=1; if(yy+1<n&&flag[xx][yy+1]==0&&(grid[xx][yy+1]==3||grid[xx][yy+1]==5||grid[xx][yy+1]==1)) sta.push({xx,yy+1}),f=1; } if(!f)sta.pop(); } if(flag[m-1][n-1]==1)return true; return false; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 7:24:19

Android MediaCodec 编码实战:从 Camera 采集到 ByteBuffer 编码,生成 MP4 文件

1. Android Camera数据采集与YUV格式解析 在Android平台上使用Camera API采集视频数据是编码流程的第一步。我遇到过不少开发者在这一步就卡壳&#xff0c;主要问题集中在Camera2 API的复杂配置和YUV数据格式的理解上。这里分享几个实战经验&#xff1a; Camera2 API的基本工作…

作者头像 李华
网站建设 2026/5/19 7:21:04

为AI智能体项目选择稳定且多模型的后端API供应商

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为AI智能体项目选择稳定且多模型的后端API供应商 在开发AI智能体或自动化工作流时&#xff0c;工程师们面临的核心挑战之一是如何为…

作者头像 李华
网站建设 2026/5/19 7:18:01

2026 AI 短剧自动生成的工具,有哪些值得说一说

3 人团队 5 天完成、上线 29 小时播放量破 2 亿——这不是电影里才有的故事&#xff0c;而是 2026 年 AI 短剧赛道的真实产能。据 DataEye 数据&#xff0c;2026 年 3 月单月新增漫剧约 4.7 万部&#xff0c;总播放增量近 477.38 亿&#xff0c;环比激增 94.52%。当下&#xff…

作者头像 李华
网站建设 2026/5/19 7:17:14

AI办公革命:国产工具提升工作效率

AI办公革命&#xff1a;国产工具提升工作效率 告别加班&#xff0c;拥抱AI。从文档到会议&#xff0c;从数据分析到邮件处理&#xff0c;国产AI工具让办公效率倍增。 一、办公革命的到来 1.1 为什么办公需要AI 职场人的一天往往被各种琐碎事务所占据&#xff1a;回复邮件、整…

作者头像 李华
网站建设 2026/5/19 7:17:06

CVE-2026-31431 Copy Fail 漏洞分析

文章目录简介pocsendmsgsplicesplice状态下的sendmsgrecv修复补丁总结AI boom!CVE漏洞库信息参考简介 漏洞自linux 4.13-rc1引入 # git show 72548b093ee3:Makefile VERSION 4 PATCHLEVEL 13 SUBLEVEL 0 EXTRAVERSION -rc1 NAME Fearless Coyote借助这个最广为流传的poc…

作者头像 李华
网站建设 2026/5/19 7:16:04

MSP430L092 0.9V超低功耗MCU:物联网设备微型化与长续航的终极方案

1. 项目概述&#xff1a;为什么0.9V工作电压是微型化与长续航的关键在物联网设备、可穿戴传感器、便携式医疗仪器以及智能家居控制器这些领域里&#xff0c;工程师们每天都在和两个“魔鬼”做斗争&#xff1a;一个是设备的物理尺寸&#xff0c;另一个是电池的续航能力。用户希望…

作者头像 李华