LeetCode #490. The Maze

leetcode490 迷宫 在迷宫中有一个球,里面有空的空间和墙壁。球可以通过滚上,下,左或右移动,但它不会停止滚动直到撞到墙上。当球停止时,它可以选择下一个方向。 给定球的起始位置,目的地和迷宫,确定球是否可以停在终点。 迷宫由二维数组表示。1表示墙和0表示空的空间。你可以假设迷宫的边界都是墙。开始和目标坐标用行和列索引表示。 样例 例1: 输入: map = [ [0,0,1,0,0], [0,0,0,... 阅读详情

题目描述:

There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolling up, down, left or right, but it won't stop rolling until hitting a wall. When the ball stops, it could choose the next direction.

Given the ball's start position, the destination and the maze, determine whether the ball could stop at the destination.

The maze is represented by a binary 2D array. 1 means the wall and 0 means the empty space. You may assume that the borders of the maze are all walls. The start and destination coordinates are represented by row and column indexes.

Example 1:

Input 1: a maze represented by a 2D array

0 0 1 0 0
0 0 0 0 0
0 0 0 1 0
1 1 0 1 1
0 0 0 0 0

Input 2: start coordinate (rowStart, colStart) = (0, 4)
Input 3: destination coordinate (rowDest, colDest) = (4, 4)

Output: true

Explanation: One possible way is : left -> down -> left -> down -> right -> down -> right.

Example 2:

Input 1: a maze represented by a 2D array

0 0 1 0 0
0 0 0 0 0
0 0 0 1 0
1 1 0 1 1
0 0 0 0 0

Input 2: start coordinate (rowStart, colStart) = (0, 4)
Input 3: destination coordinate (rowDest, colDest) = (3, 2)

Output: false

Explanation: There is no way for the ball to stop at the destination.

Note:

  1. There is only one ball and one destination in the maze.
  2. Both the ball and the destination exist on an empty space, and they will not be at the same position initially.
  3. The given maze does not contain border (like the red rectangle in the example pictures), but you could assume the border of the maze are all walls.
  4. The maze contains at least 2 empty spaces, and both the width and height of the maze won't exceed 100.
class Solution {
public:
    bool hasPath(vector<vector<int>>& maze, vector<int>& start, vector<int>& destination) {
        if(maze.size()==0||maze[0].size()==0) return true;
        int m=maze.size(), n=maze[0].size();
        vector<vector<bool>> visited(m,vector<bool>(n,false));
        vector<pair<int,int>> dirs={{0,1},{0,-1},{1,0},{-1,0}};
        queue<pair<int,int>> q;
        q.push({start[0],start[1]});
        visited[start[0]][start[1]]=true;
        while(!q.empty())
        {
            pair<int,int> p=q.front();
            q.pop();
            if(p.first==destination[0]&&p.second==destination[1]) return true;
            for(pair dir:dirs)
            {
                int x=p.first, y=p.second;
                while(x>=0&&x<m&&y>=0&&y<n&&maze[x][y]==0)
                { // 一直往一个方向遍历
                    x+=dir.first;
                    y+=dir.second;
                } // 越界之后再回退一步
                x-=dir.first, y-=dir.second;
                if(!visited[x][y])
                {
                    visited[x][y]=true;
                    q.push({x,y});
                }
            }
        }
        return false;
    }
};

 

回溯算法实战:迷宫寻路的变种与优化——从LeetCode到考研408的深度解析 本文深入解析回溯算法在迷宫寻路问题中的应用与优化,涵盖LeetCode经典题型和考研408真题。通过基础框架、变种问题解析和高级优化技巧(如记忆化搜索和启发式方向选择),帮助读者掌握算法核心思想并提升解题效率,特别适合算法学习者和考研备考者。 阅读详情

相关推荐

algoboy101#note_blog_leetcode#[490]迷宫1

给定球的起始位置,目的地和迷宫,判断球能否在目的地停下。示例 1:输入 1: 迷宫由以下二维数组表示解析: 一个可能的路径是 : 左 -> 下 -> 左 ->

LeetCode 490. 迷宫(BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS 1. 题目 由空地和墙组成的迷宫中有一个球。 球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动。 当球停下时,可以选择下一个方向。 给定球的起始位置,目的地和迷宫,判断球能否在目的地停下。 迷宫由一个0和1的二维数组表示。 1表示墙壁,0表示空地。 你可以假定迷宫的边缘都是墙壁。 起始位置和目的地的坐标通过行号和列号给出。 示例 1: 输入 1: 迷宫由以下二维数组表示 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1

Michael是个半路程序员 4384

SAP BSP网页开发入门:从SE80创建到MVC实战(附成品展示)

本文详细介绍了SAP BSP网页开发的入门与实战,从SE80环境搭建到MVC架构实现的全流程。通过具体案例和代码示例,帮助开发者掌握业务服务器页面(BSP)技术,提升SAP Web化转型中的开发效率,适用于需要扩展SAP功能的企业场景。

x1y2z的博客 1万+

Leetcode-490 迷宫(深搜)

题解 此题不同于以往的走迷宫问题,并非在每个格子都可以改变方向,只有碰到墙壁情况,停下来,才能换方向继续走,所以会比普通走迷宫多一段直线走的代码 for (int i=0; i<4; i++) { int dx = x + dirx[i]; int dy = y + diry[i]; while(dx>=0 && dx<n && dy>=0 && dy<m &&am...

小铅笔 821

2026 AI编程环境安装指南:从下载、部署到流式验证

AI编程环境已不再是传统软件安装,而是融合硬件兼容性、模型运行时与IDE插件协同的系统工程。其核心原理在于:本地GPU驱动需匹配量化运行时(如Ollama v0.3+对CUDA 12.1+的强制要求),协议层依赖gRPC流式响应,生态层则要求插件签名与模型源可信校验。这一技术组合显著提升AI代码生成的实时性与生产就绪度,支撑微服务开发、CI/CD智能补全、本地LLM推理等关键场景。本文聚焦AI编程软件下载与安装过程中的可复现部署实践,覆盖macOS/WSL2双平台、NVMe模型加速、离线校验及原子化功能验证

weixin_30480075的博客 581

VSCode玩转STM32:手把手教你配置EIDE插件与OpenOCD调试(附野火DAP配置文件详解)

本文详细介绍了如何在VSCode中配置EIDE插件与OpenOCD进行STM32开发,特别针对野火DAP调试器提供了配置文件详解。从基础环境搭建到深度调试技巧,帮助开发者高效完成STM32项目开发,实现现代化嵌入式开发工作流。

weixin_26905487的博客 551

LeetCode-490 迷宫问题(DFS)

由空地和墙组成的迷宫中有一个球,球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动。当球停下时,可以选择下一个方向。给定球的起始位置、目的地和迷宫。判断球能否在目的地停下。迷宫由一个0和1的二维数组组成,1表示墙壁,0代表空地。你可以假设迷宫的边缘都是墙壁,防止小球出界,起始位置和目的地的坐标通过行号和列好给出。该题特别注意,小球是向一个方向运动,直到停下为止,并不是一次只运动一格。最短路径-迷宫问题(DFS---

Lukegood的博客 557

2025年GESP3月认证C++五级真题解析

小 A 有 2n 件物品,小 B 和小 C 想从小 A 手上买走这些物品。对于第 i 件物品,小 B 会以 bi 的价格购买,而小 C 会以 ci 的价格购买。对于所有测试点,保证 1 <= T <= 100, 2 <= g < p <= 10^9, g, p 为整数, p 为质数。对于所有测试点,保证 1 <= n <= 10^5, 0 <= bi, ci <= 10^9, bi, ci 为整数。对于另外 50 % 的测试点,保证 n <= 100000, 0 <= bi, ci <= 10^9。

lan_in的博客 1035

leetcode490. 迷宫

思路 注意是撞到墙才停止滚动,四个方向上都能滚动 可能会滚到重复的停止位置,如果停到重复的位置就是无法滚到终点,所以标记的是停止的位置,路径是可以交叉的,如图 不能给停止的位置标记为1,如果滚动一次刚好在终点旁边,那么第二次就会在终点停止,但是这次是错误的 代码 bool dfs(int** maze, int mazeSize, int mazeColSize, int startx, int starty, int endx, int endy){ //判断停止位置 if(star..

weixin_41672404的博客 471

【GlobalMapper精品教程】084:tif(tfw)、jpg(jgw)、png(pgw)的区别与联系

摘要:本文介绍了TFW、JGW、PGW等地理参考文件的基本原理和应用。这些文件通过简单的文本格式存储栅格图像的地理坐标信息,适用于平面坐标系下的GIS数据处理。文章详细说明了文件各行的含义,并提供了在ArcGIS和Globalmapper中生成这些文件的具体操作步骤,包括导出TIFF、JPG、PNG格式时勾选生成对应坐标文件的选项。这些文件虽然简单易用,但仅适用于平面坐标系,且功能相对有限。配套视频教程提供了更详细的操作演示。

智慧空间实验室 2399

基于计算机视觉的无人便利店技术:从算法到部署的系统化实战指南

摘要:本文系统介绍了基于计算机视觉的无人便利店技术方案,提出"商品检测-跟踪-动作识别-防损-结算"五段式流水线架构。详细阐述了YOLOv8-Seg商品检测、OC-Sort多目标跟踪、3D-CNN+ST-GCN动作识别等核心算法实现,并完成NVIDIA Jetson Xavier NX边缘端的优化部署。通过TensorRT量化、DeepStream加速等技术手段,系统在保持94.7%动作识别准确率的同时,将漏单率降至0.8%,单店云端算力成本较行业平均降低84%。所有代码已开源,可直接应

博客 624

[leetcode] 490. The Maze @ python

原题 https://leetcode.com/problems/the-maze/ 解法 DFS. 定义dfs函数, 返回球从(x, y)出发, 是否能停在目的地. 回溯的条件是如果(x,y) 等于目的地, 返回True.如果(x, y)是已经访问过的, 返回False. 我们将访问过的位置放入visited, 然后在上下左右四个方向检查, 让球一直滚, 检查停住的地方是否为目的地, 如果有一个...

闲庭信步 2504

Windows 上安装 OpenCode 完全指南:从零到成功,人人能看懂!

跟着这篇教程,你应该已经成功在 Windows 上安装并运行了 OpenCode。步骤操作要点1安装 Chocolatey必须以管理员身份运行 PowerShell2安装 OpenCode3验证安装关闭并重新打开终端,输入4进入项目目录必须是 Git 仓库(git init5配置模型输入/connect,输入 API Key6开始使用输入问题测试最后的小建议如果没有 API Key,可以从 DeepSeek 或 Kimi 开始,有免费额度初次使用建议先在简单项目上测试。

专注于编程、AI、人工智能等多个领域内容研究和分析 3883

leetcode The Maze I,II,III 详细总结

[LeetCode] 490. The Maze 迷宫 一:题意 链接:https://leetcode.com/articles/the-maze/ 给定一个二维平面表示一个迷宫,迷宫中0代表空闲处,1代表墙,有一个人从start处可以上下左右四个方向移动(得朝着一个方向一直走到头,碰到墙才能换方向),碰到墙得换方向移动,问是否停在目的地destination。 经过目的地不算到达,球并不会停下来 边界已经用墙封住了,图中显示出了! 二:思路 dfs是不行的,超时了! 使用bfs来做 1:首先从sta

rainMan的博客 916

QEMU源码全解析 —— virtio(3)

QEMU源码全解析 —— virtio(3)

phmatthaus的专栏 1847

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Leetcode 490 迷宫

经过不用改visit,碰壁了改。

weixin_38682909的博客 389

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LeetCode迷宫问题实战:如何用回溯算法解决490题(滚动球版迷宫)

本文深入解析LeetCode 490题滚动球版迷宫的回溯算法解法,详细讲解如何调整传统回溯算法以适应球的连续滚动特性,包括移动逻辑重构、访问标记优化及完整代码实现。通过复杂度分析和优化方向探讨,帮助读者掌握算法面试中的解题技巧与常见误区,提升算法实战能力。

d3e4f的博客 189

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[LeetCode] 490. The Maze_Medium tag: BFS/DFS

There is aballin a maze with empty spaces and walls. The ball can go through empty spaces by rollingup,down,leftorright, but it won't stop rolling until hitting a wall. When the ball stops, it ...

weixin_30279751的博客 107

迷宫寻路算法实战:用Python实现LeetCode 490题(滚动球版迷宫)

本文详细介绍了如何使用Python实现LeetCode 490题的滚动球迷宫寻路算法。通过改造传统回溯算法,解决球体持续滚动直到撞墙的特殊移动机制,提供完整的Python代码实现、性能优化策略及实际应用场景,帮助开发者掌握这一经典算法问题的解决方案。

kite3的博客 152

【网格问题】leetcode490.迷宫

题目: 由空地(用 0 表示)和墙(用 1 表示)组成的迷宫 maze 中有一个球。球可以途经空地向 上、下、左、右 四个方向滚动,且在遇到墙壁前不会停止滚动。当球停下时,可以选择向下一个方向滚动。 给你一个大小为 m x n 的迷宫 maze ,以及球的初始位置 start 和目的地 destination ,其中 start = [startrow, startcol] 且 destination = [destinationrow, destinationcol] 。请你判断球能否在目的地停下:如果可

jqq125的博客 779

【leetcode】高频题目整理_广度优先遍历篇( High Frequency Problems, Breadth-first Search )

截止至今LeetCode题目总量已经有1582题,估计将来每年平均增长300题左右,大部分人肯定是刷不完的,所以得有选择地刷LeetCode。 一种公认的刷题策略是按类别刷题,可是每个类别也有许多题,在有限的时间里到底该刷哪些题呢?个人根据LeetCode官方给出的每个题目的出现频率,整理并收录了每个类别里高频出现的题目,对于官方统计频率太低的题目,不予收录,最终得到了这个高频题目表格。 例如,对于下图中题号#275与#270的题目将被收录,并且#275出现频率大于#270;而对于题号#1011与#11

嵌入式与Linux那些事的博客 1469

leetcode | go | 第499题 | 迷宫Ⅲ

迷宫Ⅲ

iCling的博客 158

【Leetcode】499. The Maze III

题目地址: https://leetcode.com/problems/the-maze-iii/ 给定一个二维0−10-10−1矩阵,000代表空地,111代表障碍物,再给定一个坐标代表一个洞。在某个空地上有个小球,它可以沿着四个方向滑动,每次滑动时只有遇到边界或者障碍物或者掉进洞里才会停下来(掉进洞只需经过洞就可以了)。问该小球是否可能滑到洞里,若可能,则返回最短路径的路径走法(uuu代表向上...

数学、算法爱好者的博客 695

LeetCode第 490 题:迷宫(C++)

看了这个题觉得挺有意思的,不过因为是会员题。。。。 所以就只能自己在ide上面写一写 bfs,四个方向都考虑就可以了,唯一值得注意的点是每一次碰到墙之后才会停止,所以要使用while循环来求解滚动之后的位置 #include <iostream> #include <vector> #include <queue> using namespace std; const int MAXN = 110; int maze[MAXN][MAXN]; int start[2

zj 1321
上一篇: LeetCode #1192. Critical Connections in a Network
下一篇: LeetCode #505. The Maze II
LawFile
博客等级 码龄10年 5粉丝 627原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值