题解 | #迷宫问题#

迷宫问题

http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

python3

参考大佬视频

https://www.bilibili.com/video/BV1aM4y1M7sa?p=53&spm_id_from=333.880.my_history.page.click&vd_source=b778d4cfd0c0695092103876c2c090ab

如有冒犯马上删除

队列思路解题

from collections import deque
# 列出下一步可能走的方向
dirs = [
    lambda x,y: (x,y-1),
    lambda x,y: (x+1,y),
    lambda x,y: (x, y+1),
    lambda x,y: (x-1,y)
        ]
# 打印最短路径函数
def print_real(path):
    curNode = path[-1]
    real_path =[]
    while curNode[2]!= -1:
        real_path.append(curNode[0:2])
        curNode = path[curNode[2]]
    real_path.append(curNode[0:2])
    real_path.reverse()
    for i in real_path:
        print(f'({i[0]-1},{i[1]-1})')
#建立一个队列—现在所在位置出队,下一步进队
def maze_path_queue(x1,y1,x2,y2):
    path =[]
    queue = deque()
    queue.append((x1,y1,-1))
    while len(queue)>0:
        curNode = queue.pop()
        path.append(curNode)
        if curNode[0] == x2 and curNode[1] == y2:
            print_real(path)
        for dir in dirs:
            nexNode = dir(curNode[0],curNode[1])
            if maze[nexNode[0]][nexNode[1]] == 0:
                queue.append((nexNode[0],nexNode[1], len(path)-1))
                maze[nexNode[0]][nexNode[1]] = 2
# 将输入转换成一个四面都是墙的迷宫防止下一步越界
while True:
    maze = []
    try:
        n,m = map(int, input().split())
        for i in range(n):
            maze.append([int(i) for i in input().split()])
        for i in range(n):
            maze[i].insert(0, 1)
            maze[i].append(1)
        maze.insert(0, [1 for i in range(n + 2)])
        maze.append([1 for i in range(n + 2)])
        maze_path_queue(1,1,n,m)
    except:
        break


全部评论

相关推荐

02-12 17:30
已编辑
字节跳动_实习生(实习员工)
要怎么办呢牛:我觉得大厂日常实习最大的意义就是给自己背书,一个好公司的实习就像一个好学历似的,能够给自己增加一个标签,让别人觉得你可以。(至于真正实习干了啥,这个感觉并不太重要)。当然一家之言,仅供参考。另外,楼主已经很强了,实习毕业双双拿下,已经领先好多好多人了,羡慕啊
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务