题解 | #迷宫问题#

迷宫问题

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

from collections import deque
def bfs(maze, vertex, end):
    # 起点初始化
    queue = deque([vertex])
    parent = {vertex: None}
    m, n = len(maze), len(maze[0])
    visit = [[False] * n for _ in range(m)]
    visit[vertex[1]][vertex[0]] = True
    dir = [[1, 0], [-1, 0], [0, 1], [0, -1]]  # 注:如果可以走斜线,则加上四个方向,[1,1],[1,-1],[-1,1],[-1,-1]

    # 开始遍历
    while queue:
        vertex = queue.popleft()

        if vertex == end:
            paths = deque()
            node = end
            while node:
                paths.appendleft(node)
                node = parent[node]
            min_steps = len(paths)
            return paths,min_steps

        x, y = vertex[0], vertex[1]  # 横坐标x,纵坐标y;x->列,y->行
        for i in range(4):
            nx, ny = x + dir[i][0], y + dir[i][1]
            if 0 <= nx < n and 0 <= ny < m and (not visit[ny][nx]) and maze[ny][nx] == 0:
                queue.append((nx, ny))
                parent[(nx, ny)] = vertex
                visit[ny][nx] = True

if __name__ == '__main__':
    m, n = [int(i) for i in input().split()]
    maze = [[int(i) for i in input().split()] for _ in range(m)]
    vertex = (0, 0)
    end = (n - 1, m - 1)

    paths,_ = bfs(maze, vertex, end)
    for t in paths:
        print(f'({t[1]},{t[0]})')

全部评论

相关推荐

在读外卷大学生:神仙排版,看的我头晕直接扔了
点赞 评论 收藏
分享
会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务