题解 | #迷宫问题#

迷宫问题

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

from collections import deque


def main(maze):
    directions = [[1, 0], [-1, 0], [0, -1], [0, 1]]
    length = len(maze)
    width = len(maze[0])
    visited = [[0 for _ in range(width)] for _ in range(length)]
    step = [[(-1, -1) for _ in range(width)] for _ in range(length)]
    queue = deque([(0, 0)])
    visited[0][0] = 1
    result = []
    while queue:
        x, y = queue.popleft()
        if x == length - 1 and y == width - 1:
            break
        for d in directions:
            x1 = x + d[0]
            y1 = y + d[1]
            if x1 < 0 or y1 < 0 or x1 >= length or y1 >= width or \
                    visited[x1][y1] == 1 or maze[x1][y1] == 1:
                continue
            step[x1][y1] = (x, y)
            visited[x1][y1] = 1
            queue.append((x1, y1))

    if step[length - 1][width - 1] == (-1, -1):
        return False

    # 为了将路径保存在result列表中,需要在step数组中从出口向入口逆向查找
    re_x = length - 1
    re_y = width - 1
    result.append((re_x, re_y))
    while re_x or re_y:
        re_x, re_y = step[re_x][re_y]
        result.append((re_x, re_y))
    for i in result[::-1]:
        x, y = i
        print(f'({x},{y})')


while True:
    try:
        n, m = map(int, input().split())
        matrix = []
        for _ in range(n):
            matrix.append(list(map(int, input().split())))
        main(matrix)
    except:
        break

#BFS解走迷宫问题#
全部评论
使用BFS方面解决走迷宫问题
点赞 回复 分享
发布于 2024-03-02 12:23 广东

相关推荐

评论
点赞
收藏
分享

创作者周榜

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