用python写一个走迷宫广度优先搜索的代码
时间: 2023-12-17 20:54:35 浏览: 81
好的,下面是一个简单的 Python 代码实现广度优先搜索来解决迷宫问题:
```python
from collections import deque
# 迷宫地图
maze_map = [
[0, 0, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 1, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0]
]
# 起点和终点
start = (1, 1)
end = (3, 3)
# 行走方向
deltas = [(0, 1), (1, 0), (0, -1), (-1, 0)]
def bfs(maze_map, start, end):
# 初始化队列和 visited 集合
queue = deque([start])
visited = set([start])
while queue:
# 取出队列头部
node = queue.popleft()
# 是否到达终点
if node == end:
return True
# 遍历四个方向
for delta in deltas:
# 新的节点坐标
x, y = node[0] + delta[0], node[1] + delta[1]
# 判断节点是否在地图内,是否为障碍物,是否已经被访问过
if 0 <= x < len(maze_map) and 0 <= y < len(maze_map[0]) and maze_map[x][y] == 0 and (x, y) not in visited:
queue.append((x, y))
visited.add((x, y))
return False
# 测试
if bfs(maze_map, start, end):
print("找到了一条从起点到终点的路径!")
else:
print("没有找到从起点到终点的路径!")
```
这个代码中,`maze_map` 表示迷宫地图,`start` 和 `end` 分别表示起点和终点,`deltas` 表示行走方向。`bfs` 函数实现了广度优先搜索,使用队列来实现。在遍历四个方向时,需要判断节点是否在地图内,是否为障碍物,是否已经被访问过。如果找到了一条从起点到终点的路径,就返回 `True`,否则返回 `False`。
阅读全文