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