Python迷宫求解:寻找最佳通路
Python迷宫求解:寻找最佳通路
本文介绍如何使用Python编写程序,求解迷宫的最佳通路。
问题描述
给定一个M×N的二维数组表示的迷宫,其中1表示通路,0表示障碍物。迷宫的入口位于左上角(1,1),出口位于右下角(M,N)。目标是找到从入口到出口的最短路径。
代码实现
以下是使用Python实现的迷宫求解代码:pythonclass MazeSolver: def init(self, maze): self.maze = maze self.M = len(self.maze) self.N = len(self.maze[0]) self.visited = [[False] * self.N for _ in range(self.M)] self.directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # 右、下、左、上
def solve_maze(self): stack = [(0, 0, '')] # 使用栈记录当前路径 self.visited[0][0] = True
while stack: i, j, path = stack.pop()
if i == self.M - 1 and j == self.N - 1: # 到达出口 return path + f'({i+1},{j+1},0)'
for direction in self.directions: ni = i + direction[0] nj = j + direction[1]
if 0 <= ni < self.M and 0 <= nj < self.N and self.maze[ni][nj] == 1 and not self.visited[ni][nj]: stack.append((ni, nj, path + f'({i+1},{j+1},{self.directions.index(direction)+1})')) self.visited[ni][nj] = True
return '没有通路'
while True: M, N = map(int, input().split()) if M == 0 and N == 0: break
maze = [] for _ in range(M): maze.append(list(map(int, input().split())))
solver = MazeSolver(maze) result = solver.solve_maze() print(result)
代码解释
MazeSolver类用于表示迷宫求解器。-__init__方法初始化迷宫、访问标记和方向数组。-solve_maze方法使用深度优先搜索算法寻找最佳路径。- 代码使用栈存储当前路径,并使用回溯法遍历所有可能的路径。-visited数组用于标记已访问的单元格,避免重复访问。-directions数组存储四个方向的偏移量,方便遍历。- 当找到出口时,代码返回路径字符串,否则返回'没有通路'。
示例输入和输出
输入:
4 51 0 0 0 01 1 1 0 11 0 0 1 11 1 1 1 14 41 0 0 11 0 1 11 0 0 11 0 1 10 0
输出:
(1,1,2)(2,1,2)(3,1,2)(4,1,1)(4,2,1)(4,3,1)(4,4,1)(4,5,0)没有通路
总结
本文介绍了如何使用Python解决迷宫问题,并提供了详细的代码实现和示例。该代码使用深度优先搜索算法,可以找到从迷宫入口到出口的最短路径。
原文地址: https://www.cveoy.top/t/topic/XRr 著作权归作者所有。请勿转载和采集!