leetcode490 迷宫

LeetCode - 490迷宫 【中等】DFS、BFS 阅读详情

在迷宫中有一个球,里面有空的空间和墙壁。球可以通过滚移动,
但它不会停止滚动直到撞到墙上。当球停止时,它可以选择下一个方向。

给定球的起始位置,目的地和迷宫,确定球是否可以停在终点。

迷宫由二维数组表示。1表示墙和0表示空的空间。你可以假设迷宫的边界都是墙。开始和目标坐标用行和列索引表示。

样例

例1:

输入:
map = 
[
 [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]
]
start = [0,4]
end = [3,2]
输出:
false

例2:

输入:
map = 
[[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]
]
start = [0,4]
end = [4,4]
输出:
true

注意事项

1.在迷宫中只有一个球和一个目的地。
2.球和目的地都存在于一个空的空间中,它们最初不会处于相同的位置。
3.给定的迷宫不包含边框(比如图片中的红色矩形),但是你可以假设迷宫的边界都是墙。
5.迷宫中至少有2个空的空间,迷宫的宽度和高度都不会超过100。

思路:使用BFS广度优先搜索,将遍历过得点记录的visited=true,然后将需要遍历的四个点的四个方向存在队列中。

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

相关推荐

算法学习笔记:25.回溯算法之迷宫寻路——从原理到实战,涵盖 LeetCode 与考研 408 例题

本文系统讲解了回溯算法在迷宫寻路中的应用。通过分析迷宫问题定义和回溯核心思路,文章详细介绍了"尝试-回溯"的递归探索过程,包括标记位置、方向选择和回溯清理等关键步骤。结合LeetCode 490(球滚动迷宫)和79题(单词搜索)的实战案例,展示了不同约束条件下的回溯实现方法,并给出Java代码示例。同时针对考研408考点,解析了概念辨析题和算法设计题,强调访问标记管理的重要性。文章还比较了回溯与BFS、DFS等算法的差异,指出回溯适用于求所有路径而非最短路径。最后总结了迷宫寻路的实际应用

CSBIGDOG的博客 2323

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是个半路程序员 4358

algoboy101#note_blog_leetcode#[490]迷宫1

给定球的起始位置,目的地和迷宫,判断球能否在目的地停下。示例 1:输入 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...

小铅笔 818

LeetCode-490 迷宫问题(DFS)

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

Lukegood的博客 550

leetcode490. 迷宫

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

weixin_41672404的博客 463

Leetcode 490 迷宫

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

weixin_38682909的博客 388

LeetCode刷题实战490迷宫

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !...

程序IT圈 646

LeetCode490 题:迷宫(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 1317

【网格问题】leetcode490.迷宫

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

jqq125的博客 775

leetcode-490. 迷宫-【DFS】【BFS】

文章目录解题思路代码java dfsc++ bfs 输入:maze = [[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]], start = [0,4], destination = [4,4] 输出:true 解释:一种可能的路径是 : 左 -> 下 -> 左 -> 下 -> 右 -> 下 -> 右。 解题思路 简单的dfs 特殊的是,一般的dfs只能走一步,而这个走一步就必须走到头 分别向四

超级氯化钾的博客 934

leetcode菜狗入门 | 505. 迷宫 II

迷宫 II 题目描述 由空地和墙组成的迷宫中有一个球。球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动。当球停下时,可以选择下一个方向。 给定球的起始位置,目的地和迷宫,找出让球停在目的地的最短距离。距离的定义是球从起始位置(不包括)到目的地(包括)经过的空地个数。如果球无法停在目的地,返回 -1。 迷宫由一个0和1的二维数组表示。 1表示墙壁,0表示空地。你可以假定迷宫的边缘都是墙壁。起...

weixin_42349706的博客 778

【网格问题】leetcode505.迷宫II

题目: 由空地和墙组成的迷宫中有一个球。球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动。当球停下时,可以选择下一个方向。 给定球的起始位置,目的地和迷宫,找出让球停在目的地的最短距离。距离的定义是球从起始位置(不包括)到目的地(包括)经过的空地个数。如果球无法停在目的地,返回 -1。 迷宫由一个0和1的二维数组表示。 1表示墙壁,0表示空地。你可以假定迷宫的边缘都是墙壁。起始位置和目的地的坐标通过行号和列号给出。 解答: class Solution: def shortestD

jqq125的博客 842

Leetcode490. The Maze

题目地址: https://leetcode.com/problems/the-maze/ 给定一个二维0−10-10−1矩阵,000代表空地,111代表障碍物。在某个空地上有个小球,它可以沿着四个方向滑动,每次滑动时只有遇到边界或者障碍物才会停下来。再给定一个空地作为终点,问该小球是否可能滑到终点。 思路是BFS。一步一步向外扩展,直到走到终点或者扩展不下去了为止。代码如下: import ja...

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

leetcode 494. 目标和

目标和题解集合记忆化搜索动态规划滚动数组优化一维优化---巧妙转换为01背包问题 记忆化搜索 思路: 将问题转化为对一颗多叉树的遍历,而这里每个数字都有+与-的两种选择,因此这里是构造成二叉树。 看下图: 这里显然还有大量重复计算的问题,因此需要用哈希表来保存已经计算出来的结果 这里注意递归结束条件有两个: 1.所有数字都用过,并且找到和为目标值的一种方案,返回1 2.所有数字都用过,但未找到和为目标值的方案,返回0 代码: class Solution { unordered_map<st..

m0_53157173的博客 2147

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的博客 912

[LeetCode] 490. The Maze 迷宫

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_30393907的博客 406

leetcode刷题笔记: 图论 · 从入门到精通---刷通图论(2)bfs

一个简单的想法就是把target数组当作根节点,随后搜索所有的深度为K的字节点,观察原树与把target数组的区别,关键在于需要把从原来root的到target 的路径全部逆折, 那么可以想到,从target节点开始,dfs k 次。每个单词都是一个节点, 可以转换表明这两个节点之间存在路径, 开始结束单词以及过度单词之间构成了一张图, 从开始节点bfs, 访问到结束单词说明得到路径。只有两座岛就太简单了, 先随便遍历到一个岛, 然后所有节点呈轮次向外扩张,在遍历到陆地时说明连接到水了。

weixin_43897646的博客 222
上一篇: leetcode500 键盘行
下一篇: leetcode505 迷宫II
wf0934
博客等级 码龄8年 3粉丝 23原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值