python 迷宫求路(递归方法)

代码样本:

 

class MazeRoute:#  定义类MazeRoute
    def __init__(self,arr,m,n):#在类实例创建的时候自动会被执行。
        self.__arr = arr  # 定义私有类成员self.__arr二维列表作为迷宫
        self.__m = m    #  定义私有类成员self.__m为迷宫的深度
        self.__n = n     # 定义私有类成员self.__n为迷宫的长度
    def is_true(self, arr, y, x):  # 判断函数 判断当前路径是否合法
            if y > self.__n-1 or y < 0 or x > self.__m-1 or x < 0:  # 下一步是否合法
                return False  # 返回Flase
            elif arr[y][x] == -1 or arr[y][x] == 0 :
                return False
            else:
                return True  # 返回True
    def dfs(self, arr,lst, start_y, start_x,end_y,end_x):  # 递归深搜
            if start_y == self.__n - 1 and start_x == self.__m - 1:  # 如果当前坐标等于目标坐标
                lst.append((self.__n-1,self.__m-1))
                print(lst)
                return lst
            else:
                    self.__arr[start_y][start_x] = -1
                    lst.append((start_y, start_x))
                    for i in [[1, 0], [0, 1], [-1, 0], [0, -1]]:
                        if self.is_true(arr, start_y + i[0], start_x + i[1]):
                                self.dfs(arr,lst, start_y + i[0], start_x + i[1],end_y,end_x)
                                lst.pop()
                                break
def find_route(arr,n,m):
        lst = []
        end_y  =m-1
        end_x = n-1
        a = MazeRoute(arr,n,m)
        return a.dfs(arr,lst,0,0,end_y,end_x)
if __name__ == '__main__':
    n,m = map(int,input().split())
    arr = [[1,0,0,0],[1,1,0,0],[0,1,1,1],[0,0,0,1]]
    lst = []
    find_route(arr,n,m)

输入样本:

 解释:分别输入迷宫的长和宽

输出样本:

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python递归迷宫是一种使用递归算法解决迷宫问题的方法。它通过递归地探索迷宫的路径,直到找到出口或者确定没有可行路径为止。以下是Python递归迷宫的基本思路: 1. 定义一个函数,例如`solve_maze(maze, start, end)`,其中`maze`表示迷宫的二维数组,`start`表示起始位置,`end`表示目标位置。 2. 在函数内部,首先判断当前位置是否为出口,如果是,则返回True表示找到了一条可行路径。 3. 如果当前位置不是出口,则判断当前位置是否为墙壁或者已经访问过的位置,如果是,则返回False表示此路径不可行。 4. 如果当前位置既不是出口也不是墙壁或者已访问过的位置,则将当前位置标记为已访问,并依次尝试向上、向下、向左、向右四个方向递归调用`solve_maze`函数。 5. 如果四个方向都返回False,则表示此路径不可行,将当前位置重新标记为未访问,并返回False。 6. 如果任意一个方向返回True,则表示找到了一条可行路径,将当前位置添加到路径中,并返回True。 下面是一个简单的示例代码: ```python def solve_maze(maze, start, end): if start == end: return True if maze[start][start] == 1 or maze[start][start] == -1: return False maze[start][start] = -1 if solve_maze(maze, (start-1, start), end): return True if solve_maze(maze, (start+1, start), end): return True if solve_maze(maze, (start, start-1), end): return True if solve_maze(maze, (start, start+1), end): return True maze[start[0]][start] = 0 return False ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值