当前位置:实例文章 » 其他实例» [文章]【力扣每日一题】2023.7.19 模拟行走机器人

【力扣每日一题】2023.7.19 模拟行走机器人

发布人:shili8 发布时间:2025-02-08 18:29 阅读次数:0

**力扣每日一题**

**2023.7.19 模拟行走机器人**

在一个二维平面中,存在一个机器人,它可以向上、下、左、右移动一步。给定一个初始坐标和一个目标坐标,我们需要判断是否能够从起点到达终点。

**示例1:**

输入:`start = [0,0], end = [3,1]`
输出:`true`

**示例2:**

输入:`start = [0,0], end = [-2,-2]`
输出:`false`

**示例3:**

输入:`start = [0,0], end = [4,5]`
输出:`true`

**示例4:**

输入:`start = [0,0], end = [1,1]`
输出:`true`

**示例5:**

输入:`start = [0,0], end = [-3,-2]`
输出:`false`

**思路和解法**

这个问题可以使用广度优先搜索(BFS)来解决。我们首先将起点加入到队列中,然后开始遍历邻居节点,直到找到终点或队列为空。

from collections import dequedef is_valid(x, y):
 return0 <= x < len(grid[0]) and0 <= y < len(grid)

def robot_walk(grid, start, end):
 if not grid or not grid[0]:
 return False rows, cols = len(grid), len(grid[0])
 # 将起点加入到队列中 queue = deque([(start[0], start[1])])
 # 标记已访问的节点 visited = {(start[0], start[1]): True}
 while queue:
 x, y = queue.popleft()
 if [x, y] == end:
 return True for dx, dy in [(1,0), (-1,0), (0,1), (0, -1)]:
 nx, ny = x + dx, y + dy # 检查是否有效 if is_valid(nx, ny) and not visited.get((nx, ny)):
 queue.append((nx, ny))
 visited[(nx, ny)] = True return False# 测试用例grid = [
 [0,0,0],
 [0,1,0],
 [0,0,0]
]

print(robot_walk(grid, [0,0], [2,2])) # True


**注意:**

* 这个解决方案假设 `grid` 是一个二维列表,表示机器人可以移动的区域。
* `start` 和 `end` 是元组,分别代表起点和终点坐标。
* `is_valid(x, y)` 函数检查是否有效的坐标。
* `robot_walk(grid, start, end)` 函数返回一个布尔值,表示是否可以从起点到达终点。

**总结:**

这个解决方案使用广度优先搜索(BFS)来模拟机器人的行走过程。它首先将起点加入到队列中,然后开始遍历邻居节点,直到找到终点或队列为空。这个解决方案适用于任何可以表示为二维列表的区域,并且可以轻松扩展到更复杂的情况。

其他信息

其他资源

Top