使用广度优先算法生成解决迷宫路径问题的python代码
时间: 2023-12-22 17:02:44 浏览: 96
好的,以下是使用广度优先算法生成解决迷宫路径问题的 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)
prev = {} # 记录路径的前一个位置
# 开始搜索
while not q.empty():
cur_pos = q.get()
# 判断是否到达终点
if cur_pos == end_pos:
return True, prev
# 搜索当前位置的四个方向
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)
prev[next_pos] = cur_pos
# 没有找到终点
return False, prev
# 调用广度优先搜索函数
found, prev = bfs()
if found:
# 构建路径
path = [end_pos]
cur = end_pos
while cur != start_pos:
cur = prev[cur]
path.append(cur)
path.reverse()
# 输出路径
print("可以到达终点!路径为:")
for i in range(n):
for j in range(m):
if (i, j) in path:
print("★", end="")
elif maze[i][j] == 1:
print("■", end="")
else:
print("□", end="")
print()
else:
print("无法到达终点!")
```
这段代码与之前的代码唯一不同的地方是在输出路径时,将路径上的位置用星号(★)标记,将障碍物用实心方块(■)标记,将其他位置用空心方块(□)标记。这样,输出的结果就是一个带有路径的迷宫地图。
阅读全文