python-一看就明白的迷宫问题的解法

迷宫问题的解法主要是使用了栈来解决
有四个方向,用lambda来定义
将走过的每一步都加入到栈中
如果走的是死路,就退栈
到达了终点的话,就打印出栈中的值
具体逻辑请看代码的实现

maze = [
    [1,1,1,1,1,1,1,1,1,1],
    [1,0,0,1,0,0,0,1,0,1],
    [1,0,0,1,0,0,0,1,0,1],
    [1,0,0,0,1,1,0,0,0,1],
    [1,0,1,1,1,0,0,0,0,1],
    [1,0,0,0,1,0,0,0,0,1],
    [1,0,1,0,0,0,1,0,0,1],
    [1,0,1,1,1,0,1,1,0,1],
    [1,1,0,0,0,0,0,0,0,1],
    [1,1,1,1,1,1,1,1,1,1]
]  #迷宫本体

dirs = [
    lambda x,y:(x+1,y), #下
    lambda x,y:(x-1,y), #上
    lambda x,y:(x,y-1), #左
    lambda x,y:(x,y+1)  #右
]   #四个方向
def solve_maze(x1,y1,x2,y2): 
    stack = []  #建立一个抽象栈
    stack.append((x1,y1))  #加入第一个点
    maze[x1][y1]=2   #2表示已经走过的路
    while len(stack) > 0: #当栈不空时
        cur_node = stack[-1]  #栈倒数第一个值(栈顶的值)
        if cur_node==(x2,y2):  #到达终点
            print(stack)  #将解法打印出来
            return  #并且return
        for dir in dirs:
            #next_node=dir(*cur_node)
            next_node = dir(cur_node[0],cur_node[1])
            if maze[next_node[0]][next_node[1]] == 0: #等于0表示可以走
                stack.append(next_node)  #加入栈
                maze[next_node[0]][next_node[1]] = 2 #2表示走过了
                break
        else:
            stack.pop()
    else:
        print('No way to go')
solve_maze(1,1,8,8)


在这里插入图片描述

你可能感兴趣的:(Python,算法)