python使用队列走迷宫

使用队列走迷宫,并打印出路径。队列走迷宫没有回溯,话不多说,兄弟萌,上代码!

from stack_queue.loop_queue import SQueue

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_queue(maze,start,end):
    """使用队列"""
    if start == end: # 特殊情况
        print("Path Found")
        return

    qu = SQueue()
    mark(maze,start)
    qu.enqueue(start) # start位置入列

    path_dic = {} # 记录当前位置与其前驱

    while not qu.is_empty(): # 队列里还有元素
        pos = qu.dequeue() # 取出队首元素
        for i in range(4): # 检查每个方向
            nextp = (pos[0]+dirs[i][0],pos[1]+dirs[i][1]) # 列举各位置

            if nextp[0]<0 or nextp[0]>len(maze)-1 or nextp[1]<0 or nextp[1]>len(maze[0])-1:
                continue

            if nextp == end: # 是出口
                print("Path Found") # 成功
                path_dic[nextp] = pos

                """显示迷宫路径"""
                item = end
                path = []
                while item != start:
                    path.append(str(path_dic[item])+'->'+str(item))
                    item = path_dic[item]
                for i in range(len(path)):
                    print(path.pop())

                return
            if passable(maze,nextp): # 当前位置是可以访问的
                path_dic[nextp] = pos
                mark(maze,nextp) # 标记为已访问
                qu.enqueue(nextp) # 新位置入队
    print("NO PATH.") # 没有路径,失败


if __name__ == '__main__': # 测试一下
    maze = [[1,1,1],[0,0,1],[1,0,0]]
    start = (1,0)
    end = (2,2)
    maze_solver_queue(maze,start,end)


SQueue的实现在这里

测试的迷宫:

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值