题解 | #迷宫问题#

迷宫问题

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

基于广度优先遍历

  1. 最短路径遍历到后程序结束;
  2. 需要记录下路径

def maze_solution(nx, ny, maze):
    visited = set()
    # 全局队列
    Q = [(0, 0)]
    # 当前队列
    q = []
    # 最短路径
    path = []
    # 可以移动的方向
    directions = (
        (0, 1),
        (0, -1),
        (1, 0),
        (-1, 0)
    )

    while Q:
        while Q:
            x, y = Q.pop(0)
            if (x, y) not in path:
                path.append((x, y))
            if x == nx - 1 and y == ny - 1:
                # 返回最短路径
                # 重建路径
                cur = (x, y)
                tmp = [cur]
                for i in range(len(path) - 1, 0, -1):
                    x2, y2 = path[i - 1]
                    x1, y1 = cur
                    for dx, dy in directions:
                        if x2 == x1 + dx and y2 == y1 + dy:
                            tmp.insert(0, (x2, y2))
                            cur = (x2, y2)
                # print(path)
                return tmp
            else:
                for dx, dy in directions:
                    new_x, new_y = x + dx, y + dy
                    if (new_x, new_y) not in visited and 0 <= new_x < nx and 0 <= new_y < ny and maze[new_x][new_y] == 0:
                        # 将当前point记录到访问集合
                        visited.add((new_x, new_y))
                        # 本轮可移动的路径均记录在q
                        q.append((new_x, new_y))
        # 取出当前轮的其他路径继续遍历
        while q:
            Q.append(q.pop(0))


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

for item in maze_solution(nx, ny, maze):
    print(f'({item[0]},{item[1]})')


全部评论

相关推荐

三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
评论
点赞
2
分享
牛客网
牛客企业服务