bfs模板

分享 BFS 模板:

BFS使用队列,把每个还没有搜索到的点依次放入队列,然后再弹出队列的头部元素当做当前遍历点。

BFS总共有两个模板:

模板一:

如果不需要确定当前遍历到了哪一层,只需要访问完所有节点就可以时。

BFS 模板如下:

while queue 不空:
    cur = queue.pop()
    if cur 有效且未被访问过:
        进行处理
    for 节点 in cur 的所有相邻节点:
        if 该节点有效:
            queue.push(该节点)

 


模板二:

如果要确定当前遍历到了哪一层,需要知道最少移动步数时,BFS 模板如下。

这里增加了 level 表示当前遍历到二叉树中的哪一层了,也可以理解为在一个图中,现在已经走了多少步了。size 表示在当前遍历层有多少个元素,也就是队列中的元素数,我们把这些元素一次性遍历完,即把当前层的所有元素都向外走了一步。

 1 level = 0
 2 while queue 不空:
 3     size = queue.size()
 4     while (size --) {
 5         cur = queue.pop()
 6         if cur 有效且未被访问过:
 7             进行处理
 8         for 节点 in cur的所有相邻节点:
 9             if 该节点有效:
10                 queue.push(该节点)
11     }
12     level ++;


上面两个是通用模板,在任何题目中都可以用,是要理解并且记住的!

 

posted @ 2022-05-23 10:55  r1-12king  阅读(175)  评论(0编辑  收藏  举报