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解决迷宫问题,并提供了详细的代码实现和示例。该代码使用深度优先搜索算法,可以找到从迷宫入口到出口的最短路径。

Python迷宫求解:寻找最佳通路

原文地址: https://www.cveoy.top/t/topic/XRr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录