题解 | #迷宫问题#

迷宫问题

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

# 定义一个用来在迷宫中找路径的函数
def bfs(maze):
    # 获取迷宫的行数和列数
    m, n = len(maze), len(maze[0])
    # 如果迷宫是空的,就没有路径
    if m == 0 or n == 0:
        return []
    # 准备一个队列,开始时只有起点在里面
    queue = [(0, 0, [(0, 0)])]
    # 记录我们访问过的地方,开始时只有起点
    visited = set([(0, 0)])

    # 当队列不为空时,继续寻找路径
    while queue:
        # 从队列中取出一个位置和到这个位置的路径
        row, col, path = queue.pop(0)
        # 如果这个位置是出口,就找到了路径
        if (row, col) == (m - 1, n - 1):
            return path
        # 尝试向上下左右四个方向移动
        for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
            # 计算移动后的位置
            next_row, next_col = row + dx, col + dy
            # 如果新位置有效,并且没有被墙挡住,并且没有访问过
            if (
                0 <= next_row < m
                and 0 <= next_col < n
                and maze[next_row][next_col] == 0
                and (next_row, next_col) not in visited
            ):
                # 将新位置和到达新位置的路径加入队列
                queue.append((next_row, next_col, path + [(next_row, next_col)]))
                # 标记新位置为已访问
                visited.add((next_row, next_col))
    # 如果走遍了所有可能的路都没有找到出口,就返回空列表
    return []


# 不停地读取输入,直到没有更多数据
while True:
    try:
        # 读取迷宫的行数和列数
        m, n = map(int, input().split())
        maze = []
        # 根据行数读取迷宫数据
        for _ in range(m):
            row = list(map(int, input().split()))
            maze.append(row)

        # 使用BFS方法找路径
        path = bfs(maze)

        # 打印找到的路径
        for step in path:
            print(f"({step[0]},{step[1]})")
    # 如果读取数据时出错(例如没有更多数据了),就结束程序
    except EOFError:
        break

全部评论

相关推荐

微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
Pandaileee:校友加油我现在也只有一个保底太难了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务