题解 | #迷宫问题#

迷宫问题

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 广东

相关推荐

专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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