当前位置: 首页 > news >正文

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.lengthn grid[i].length1 m, n 3001 grid[i][j] 6分析从起点开始进行 BFS用一个队列记录当前可以走到的街道位置初始时队列里仅有起点的坐标位置。每次进行 BFS 时检查队列头的坐标根据它的街道形式判断能否走到相邻的街和相邻的街道是否已经走到过如果可以走到并且没有走过则标记相邻街道已访问并入队直到队列为空或者走到右下角。最后检查右下角是否走过如果走过返回 true否则返回 false。class Solution { public: bool hasValidPath(vectorvectorint grid) { int x0,y0,f1,mgrid.size(),ngrid[0].size(),flag[m5][n5]; for(int i0;im;i) for(int j0;jn;j) flag[i][j]0; stackpairint,intsta;sta.push({0,0}); while(!sta.empty()) { int xxsta.top().first,yysta.top().second,f0; flag[xx][yy]1; if(grid[xx][yy]1) { if(yy1nflag[xx][yy1]0(grid[xx][yy1]3||grid[xx][yy1]5||grid[xx][yy1]1)) sta.push({xx,yy1}),f1; if(yy-10flag[xx][yy-1]0(grid[xx][yy-1]4||grid[xx][yy-1]6||grid[xx][yy-1]1)) sta.push({xx,yy-1}),f1; } else if(grid[xx][yy]2) { if(xx1mflag[xx1][yy]0(grid[xx1][yy]5||grid[xx1][yy]6||grid[xx1][yy]2)) sta.push({xx1,yy}),f1; if(xx-10flag[xx-1][yy]0(grid[xx-1][yy]3||grid[xx-1][yy]4||grid[xx-1][yy]2)) sta.push({xx-1,yy}),f1; } else if(grid[xx][yy]3) { if(xx1mflag[xx1][yy]0(grid[xx1][yy]5||grid[xx1][yy]6||grid[xx1][yy]2)) sta.push({xx1,yy}),f1; if(yy-10flag[xx][yy-1]0(grid[xx][yy-1]4||grid[xx][yy-1]6||grid[xx][yy-1]1)) sta.push({xx,yy-1}),f1; } else if(grid[xx][yy]4) { if(xx1mflag[xx1][yy]0(grid[xx1][yy]5||grid[xx1][yy]6||grid[xx1][yy]2)) sta.push({xx1,yy}),f1; if(yy1nflag[xx][yy1]0(grid[xx][yy1]3||grid[xx][yy1]5||grid[xx][yy1]1)) sta.push({xx,yy1}),f1; } else if(grid[xx][yy]5) { if(xx-10flag[xx-1][yy]0(grid[xx-1][yy]3||grid[xx-1][yy]4||grid[xx-1][yy]2)) sta.push({xx-1,yy}),f1; if(yy-10flag[xx][yy-1]0(grid[xx][yy-1]4||grid[xx][yy-1]6||grid[xx][yy-1]1)) sta.push({xx,yy-1}),f1; } else if(grid[xx][yy]6) { if(xx-10flag[xx-1][yy]0(grid[xx-1][yy]3||grid[xx-1][yy]4||grid[xx-1][yy]2)) sta.push({xx-1,yy}),f1; if(yy1nflag[xx][yy1]0(grid[xx][yy1]3||grid[xx][yy1]5||grid[xx][yy1]1)) sta.push({xx,yy1}),f1; } if(!f)sta.pop(); } if(flag[m-1][n-1]1)return true; return false; } };
http://www.zskr.cn/news/1315914.html

相关文章:

  • WebAssembly入门:在浏览器中运行高性能代码
  • HunterPie终极指南:5分钟掌握《怪物猎人世界》实时监控神器
  • 英雄联盟智能助手Seraphine:提升游戏体验的终极工具指南
  • 这种界面和额外附加认证要求以前从来没有过
  • OmenSuperHub终极指南:释放惠普游戏本性能的免费开源方案
  • 石家庄资深运势布局调理大师
  • AI 技术日报 - 2026-05-19
  • 安装离线版mysql,全网最详细
  • 为AI智能体项目选择稳定且多模型的后端API供应商
  • 神经网络分子动力学与长程静电相互作用优化技术
  • 智在记录:AI 全能笔记助手的实战应用与价值落地
  • Transformers源码解析:Trainer与训练循环设计-实战落地指南
  • 使用 Elcomsoft System Recovery 恢复 Windows 凭据
  • 用Python手把手复现灰狼算法GWO:从狩猎行为到代码实现(附完整源码)
  • 国产巴伦替代 Mini-Circuits TCM1‑63AX+,H3‑TCM1‑63AX+ 现货可原位替代
  • 腾讯大模型岗位怎么准备:别只会讲模型,搜索推荐和产品落地才是主线
  • 大图变清晰 API 完整教程:大图放大4倍不失真,AI超分辨率原理与多语言接入(附 Python/Java/JS 示例)
  • 冥想第一千八百八十四天(1884)
  • CodeWF Toolbox:一个用 Avalonia + Prism 做出来的开发者工具箱
  • 掌握RAG大模型开发:小白程序员必备的AI学习指南,收藏提升技能!
  • AI音乐工具生成Funk RB风格:提示词与成片稳定性对比
  • 甲骨文云 ARM 实例安装 CentOS 7 出现内核 Panic 怎么修?
  • 【网络安全】圈内热门逆向工具 TOP9 合集
  • Windows HEIC缩略图终极解决方案:3分钟让资源管理器识别iPhone照片
  • Claude Code 多智能体团队模式(Agent Teams)深度指南
  • 【麒麟系统-解释器错误:权限不足】
  • NTN 长距离通信领域亮相
  • 当我们谈论“防治养”时,我们谈论的是一种生活方式的重构
  • pycharm接入AI大模型测试脚本费用说明
  • 新手教程使用curl命令一分钟测试Taotoken的OpenAI兼容API