用广度优先算法生成走迷宫的python代码
时间: 2023-07-24 09:26:49 浏览: 113
基于深度优先遍历的迷宫生成程序
5星 · 资源好评率100%
好的,以下是用广度优先算法生成走迷宫的 Python 代码:
```python
from queue import Queue
# 迷宫地图,其中 0 表示可走的路,1 表示障碍物
maze = [
[0, 0, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 0],
[1, 0, 0, 1, 0],
[0, 0, 0, 0, 0]
]
# 迷宫的行数和列数
n = len(maze)
m = len(maze[0])
# 起点和终点坐标
start_pos = (0, 0)
end_pos = (n-1, m-1)
# 定义四个方向的偏移量
directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
# 广度优先算法
def bfs():
# 初始化队列和起点
q = Queue()
q.put(start_pos)
visited = set()
visited.add(start_pos)
# 开始搜索
while not q.empty():
cur_pos = q.get()
# 判断是否到达终点
if cur_pos == end_pos:
return True
# 搜索当前位置的四个方向
for d in directions:
next_pos = (cur_pos[0]+d[0], cur_pos[1]+d[1])
# 判断下一个位置是否越界或者是障碍物
if next_pos[0] < 0 or next_pos[0] >= n or next_pos[1] < 0 or next_pos[1] >= m or maze[next_pos[0]][next_pos[1]] == 1:
continue
# 判断下一个位置是否已经访问过
if next_pos not in visited:
q.put(next_pos)
visited.add(next_pos)
# 没有找到终点
return False
# 调用广度优先搜索函数
if bfs():
print("可以到达终点!")
else:
print("无法到达终点!")
```
这段代码中,我们使用队列来实现广度优先搜索,每次从队列中取出一个位置,然后搜索它周围的四个方向,如果下一个位置没有越界、不是障碍物,并且没有访问过,就将它加入队列中。如果搜索到了终点,就返回 True,否则返回 False。
阅读全文