题解 | #迷宫问题#

迷宫问题

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

N, M = map(int, input().split())
maze = [] # 构造N行M列的迷宫
for _ in range(N):
    row = list(map(int, input().split()))
    maze.append(row)

# 定义下一步的位置
dirs = [
    lambda x,y: (x+1,y), # 向上
    lambda x,y: (x-1,y), # 向下
    lambda x,y: (x,y-1), # 向左
    lambda x,y: (x,y+1), # 向右
]

def maze_path(x1,y1,x2,y2):
    stack = []
    stack.append((x1, y1))
    while(len(stack)>0):
        curNode = stack[-1] # 当前的节点
        if curNode[0] == x2 and curNode[1] == y2:
            # 走到终点了
            for p in stack:
                print('(%s,%s)' % (p[0],p[1]))
            return True

        # x,y 四个方向 x-1,y; x+1,y; x,y-1; x,y+1
        for dir in dirs:
            nextNode = dir(curNode[0], curNode[1])
            # 判断下一个点是否超出范围
            if nextNode[0] not in range(N) or nextNode[1] not in range(M):
                continue
            
            # 如果下一个节点能走
            if maze[nextNode[0]][nextNode[1]] == 0:
                stack.append(nextNode)
                maze[nextNode[0]][nextNode[1]] = 2 # 2表示为已经走过
                break
        else:
            maze[curNode[0]][curNode[1]] = 2
            stack.pop()
    else:
        print("没有路")
        return False

maze_path(0,0,N-1,M-1)

全部评论

相关推荐

12-24 14:26
东北大学 Java
一只乌鸦:重邮+东北,好经典的学校
最后再改一次简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务