ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python 迷宫求路(递归方法)

2021-07-29 14:58:06  阅读:284  来源: 互联网

标签:arr .__ end 递归 python self 求路 start lst


代码样本:

 

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)

输入样本:

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

输出样本:

 

标签:arr,.__,end,递归,python,self,求路,start,lst
来源: https://blog.csdn.net/qq_51535860/article/details/119211230

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有