题解 | #迷宫问题#

迷宫问题

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

m, n = map(int, input().split())
maze = []
for i in range(m):
    maze.append(list(map(int, input().split())))

# 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)
# ]
# 上述dir方法等同于:
def ne_point(x,y):
    return [(x, y+1),(x+1, y),(x, y-1),(x-1, y)]

def maze_path(x1, y1, x2, y2): #开始坐标和结束坐标
    stack = []
    stack.append((x1,y1))
    while stack:
        cur_point = stack[-1]
        if cur_point[0] == x2 and cur_point[1] == y2:  #当前节点是最后一个点的坐标时候,证明找到了家
            for p in stack:
                print('(' + str(p[0]) + ',' + str(p[1]) + ')')
            return True
        for next_point in ne_point(cur_point[0],cur_point[1]):
            if (0 <= next_point[0] <= m-1) and (0 <= next_point[1] <= n-1):   #保证索引没有越界
                if maze[next_point[0]][next_point[1]] == 0:    # 找到了下一个可以走的节点
                    stack.append(next_point)         # 入栈
                    maze[next_point[0]][next_point[1]] = 2  #标记为已遍历
                    break     # 终止for循环,while循环不影响
        else:
            stack.pop()   #当前节点出栈
            maze[cur_point[0]][cur_point[1]] = 2 # 将当前节点标记为已遍历
    else:
        # 证明stack为空,也就说没有找到家,死胡同
        return False

maze_path(0, 0, m-1, n-1)

全部评论

相关推荐

07-02 13:52
武汉大学 golang
骗你的不露头也秒
牛客87776816...:😃查看图片
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
06-26 17:24
已编辑
宁波大学 Java
迷失西雅图:别给,纯kpi,别问我为什么知道
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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