python使用栈走迷宫

栈走迷宫,一直在往4个方向把位置压入栈中,当当前位置4个方向都不能加入的时候,它就取出栈顶的位置,再往4个方向添加位置压入栈中(这里要注意判断只有当没有访问过的位置才可以压入栈)。

兄弟萌,话不多说,上代码!

from stack_queue.code import SStack

dirs = [(0,1),(1,0),(0,-1),(-1,0)]

def mark(maze,pos): # 给迷宫maze的位置pos标2表示"到过"
    maze[pos[0],pos[1]] = 2

def passable(maze,pos): # 检查迷宫maze的位置pos是否可行
    return maze[pos[0],pos[1]] == 0


def maze_solver(maze,start,end):
    if start == end:
        print(start)
        return
    st = SStack()
    mark(maze,start) # 标记当前位置已访问
    st.push((start,0)) # 入口和方向0的序对入栈
    while not st.is_empty(): # 走不通时回退
        pos, nxt = st.pop() # 取栈顶及其探查方向
        for i in range(nxt,4): # 依次检查未探查方向
            nextp = (pos[0]+dirs[i][0],
                     pos[1]+dirs[i][1]) # 算出下一位置
            if nextp == end: # 到达出口,打印路径
                print_path((end,pos,st)) # 这个函数需要自己实现
                return
            if passable(maze,nextp): # 遇到未探查的新位置
                st.push((pos,i+1)) # 原位置和下一方向入栈
                mark(maze,nextp)
                st.push((nextp,0)) # 新位置入栈
                break # 退出内层循环,下次迭代将以新栈为当前位置继续
    print("No path found.")

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值