Python迷宫寻路算法:BFS实现及代码示例
Python迷宫寻路算法:BFS实现及代码示例
您是否曾好奇如何使用编程算法解决迷宫问题?本文将介绍如何使用广度优先搜索(BFS)算法,并提供一个完整的Python代码示例,帮助您理解和实现迷宫寻路功能。
广度优先搜索(BFS)算法简介
BFS是一种图遍历算法,它从图的某个节点出发,以广度优先的方式遍历图,直到找到目标节点或遍历完整个图。在迷宫寻路问题中,我们可以将迷宫视为一个图,每个可到达的格子都是一个节点,相邻的可到达格子之间存在边。
Python代码实现
以下Python代码使用BFS算法实现迷宫寻路功能,并包含了从控制台接收输入和输出结果的部分:pythonfrom collections import deque
def bfs(maze, start, end): rows, cols = len(maze), len(maze[0]) # 迷宫大小 directions = [(0, -1), (0, 1), (-1, 0), (1, 0)] # 上、右、下、左四个方向的移动向量
queue = deque([start]) # 初始化队列,将起始位置加入队列 visited = set() # 记录已访问的节点
while queue: cur_pos = queue.popleft() # 取出队列首部的节点
if cur_pos == end: # 如果当前位置是终点,返回路径 path = [] while cur_pos != start: path.append(cur_pos) cur_pos = cur_pos[2] path.append(start) path.reverse() return path
visited.add(cur_pos) # 标记当前位置已访问
for direction in directions: # 检查四个方向是否可以移动 next_row = cur_pos[0] + direction[0] next_col = cur_pos[1] + direction[1] next_pos = (next_row, next_col, cur_pos) # 记录下一个位置和当前位置的引用
if ( 0 <= next_row < rows and 0 <= next_col < cols and maze[next_row][next_col] == 0 and next_pos not in visited ): queue.append(next_pos) # 将下一个位置加入队列
return None # 没有找到路径
接收迷宫大小和起始/结束位置输入rows = int(input('请输入迷宫的行数:'))cols = int(input('请输入迷宫的列数:'))maze = []for i in range(rows): row = list(map(int, input(f'请输入第 {i+1} 行迷宫的数据(0表示通路,1表示墙壁):').split())) maze.append(row)
start_row = int(input('请输入起始位置的行号:'))start_col = int(input('请输入起始位置的列号:'))start = (start_row, start_col, None) # 起始位置为 (start_row, start_col),并且没有前驱节点
end_row = int(input('请输入结束位置的行号:'))end_col = int(input('请输入结束位置的列号:'))end = (end_row, end_col) # 结束位置为 (end_row, end_col)
使用 BFS 寻找路径path = bfs(maze, start, end)
输出结果if path: print('找到路径:') for pos in path: print(pos)else: print('未找到路径。')
如何运行代码
- 将代码保存为Python文件(例如 maze_solver.py)。2. 在控制台中使用命令
python maze_solver.py运行代码。3. 按照提示输入迷宫的行数、列数、每行的迷宫数据(0表示通路,1表示墙壁)、起始位置的行号和列号、结束位置的行号和列号。
示例
例如,对于以下迷宫:
0 0 1 00 0 0 11 1 0 00 1 1 0
假设起始位置为 (0, 0),结束位置为 (3, 3),则您需要在控制台中输入以下内容:
请输入迷宫的行数:4请输入迷宫的列数:4请输入第 1 行迷宫的数据(0表示通路,1表示墙壁):0 0 1 0请输入第 2 行迷宫的数据(0表示通路,1表示墙壁):0 0 0 1请输入第 3 行迷宫的数据(0表示通路,1表示墙壁):1 1 0 0请输入第 4 行迷宫的数据(0表示通路,1表示墙壁):0 1 1 0请输入起始位置的行号:0请输入起始位置的列号:0请输入结束位置的行号:3请输入结束位置的列号:3
程序将输出找到的路径:
找到路径:(0, 0, None)(1, 0, (0, 0, None))(2, 0, (1, 0, (0, 0, None)))(2, 1, (2, 0, (1, 0, (0, 0, None))))(2, 2, (2, 1, (2, 0, (1, 0, (0, 0, None))))))(3, 2, (2, 2, (2, 1, (2, 0, (1, 0, (0, 0, None)))))))(3, 3, (3, 2, (2, 2, (2, 1, (2, 0, (1, 0, (0, 0, None)))))))
总结
本文介绍了如何使用Python实现BFS算法解决迷宫寻路问题,并提供了完整的代码示例和使用方法。您可以根据自己的需要修改和扩展代码,例如可视化迷宫和寻路过程。
原文地址: https://www.cveoy.top/t/topic/QrM 著作权归作者所有。请勿转载和采集!