Python 用栈解决迷宫问题

思路:

1.从起始位置开始向四个方向搜索,有路可走的点入栈;

2.遇到走不通的点,则进行标记,表示已经搜索过,并且返回上一个顶点再次搜索

3.不符合的则出栈,最后在栈里的则是路径

代码如下;

##栈解决迷宫问题
##四个方向
dirs=[
    lambda x,y:(x-1,y),
    lambda x,y:(x,y+1),
    lambda x,y:(x+1,y),
    lambda x,y:(x,y-1)
]


def maze_find(l,x1,y1,x2,y2):
    stack=[]##建立栈
    stack.append((x1,y1))##建立元组记录坐标

    while len(stack)>0:
        now_node = stack[-1]
        if now_node[0]==x2 and now_node[1]==y2:##到达终点
            for path in stack:
                print(path)
            return True
        for dir in dirs:##四个方向走
            next_node=dir(now_node[0],now_node[1])
            if l[next_node[0]][next_node[1]]==0:
                stack.append(next_node)
                l[next_node[0]][ next_node[1]] =2
                break##找到一个就可以走

        else:##四个方向都不可以走 出栈 寻找上一个顶点
            l[now_node[0]][now_node[1]] =2
            stack.pop()
    else:##没有出路
        print("世界上本来没有路,但是走的人多了便有了路!")
        return False

if __name__ == '__main__':
##0表示可以走 1表示不可以走
    l=[
        [1,1,1,1,1,1,1],
        [1,0,0,0,0,0,1],
        [1,0,0,0,1,1,1]
    ]
    maze_find(l,1,1,2,3)


  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值