题解 | #迷宫问题#

迷宫问题

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

#将输入的内容转化为二维数组迷宫
M,N = map(int,input().split())

#在输入的迷宫内容的四周加上一层墙,这样不用考虑走到边界有的方向不能走的问题,此时,起点的坐标变为(1,1),终点坐标为(M,N)
maze = []
for i in range(M+2):
    if i == 0 or i == M+1:
        line = [1 for _ in range(N+2)]
        maze.append(line)
    else:
        lin = ('1' + ' ' + input() + ' ' + '1').split()
        line = [int(n) for n in lin]
        maze.append(line)

#定义前进方向
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 maze_rout(x0,y0,x1,y1):#x0,y0,x1,y1分别表示起点和终点的下标
    stack = []#栈用来保存走过的路
    stack.append((x0,y0))
    while stack:#当栈空时表示没有路走到终点
        currnode = stack[-1]
        if currnode[0] == x1 and currnode[1] == y1:
            for p in stack:
                p1 = (p[0]-1,p[1]-1)
                print('('+str(p1[0])+','+str(p1[1])+')')
            break
        
        for dir in dirs:
            nextnode = dir(currnode[0],currnode[1])
            if maze[nextnode[0]][nextnode[1]] == 0:
                stack.append(nextnode)
                maze[nextnode[0]][nextnode[1]] = 2
                break

        else:#其它三个方向都没有路时往回退
            stack.pop()

maze_rout(1,1,M,N)
        

全部评论

相关推荐

牛客10001:问就是六个月,全国可飞,给钱就干
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务