BFS - 广度行走


广度优先搜索(BFS
BFS (广度优先搜索,广度优先搜索)——一种图遍历方法,在简单算法和高级算法中都非常常用。广度优先搜索的工作原理是逐步遍历图形的各个级别,从源节点开始并逐渐远离它。动画中清楚地显示了这一点。
要编写最简单的 BFS ,您需要能够使用一种数据结构,该数据结构允许您从头到尾获取,并能够存储邻接表形式的图(即带有队列)。
 
算法的形式化描述
1) 将开始搜索的顶点编号放入最初为空的队列中。
2) 从队列的开头提取顶点 U 并将其标记为在单独的数组中使用。
3) 在队列的末尾,添加我们可以使用来自顶点U,的边到达 并且尚未标记的所有顶点。
4) 如果队列为空,则连通图的所有节点都扫描完毕,否则返回步骤2。
 
复杂度
由于算法在最坏情况下会访问图的所有节点,当将图存储为邻接表时, 算法的时间复杂度为 O(|V| + |E|) ,其中 V 是图顶点的集合,E 是边的集合。 换句话说,该算法在 number 的最坏情况下有效边数 + 顶点数.

 

BFS(广度优先搜索)是一种图遍历方法,在简单算法和高级算法中都非常常用。广度优先搜索的工作原理是逐步遍历图形的各个级别,从源节点开始并逐渐远离它。动画中清楚地显示了这一点。
要编写一个简单的 BFS,您需要能够使用队列,这是一种数据结构,可以让您从头到尾获取数据,还能够以以下形式存储图形邻接表。
 
算法的正式描述
1) 将开始搜索的顶点编号放入最初为空的队列中。
2) 从队列的开头提取顶点 U 并将其标记为在单独的数组中使用。
3) 在队列的末尾,添加我们可以使用从顶点 U 开始的边到达但尚未标记的所有顶点。
4) 如果队列为空,则连通图的所有节点都扫描完毕,否则返回步骤2。
 
工作难度
由于在最坏的情况下,算法会访问图的所有节点,当以邻接表的形式存储图时,算法的时间复杂度为 O(|V| + |E|),其中 V 是集合图的顶点的集合,E 是边的集合。 ;
换句话说,该算法在边数 + 顶点数的最坏情况下有效。

 

要恢复最短路径,创建一个“祖先”数组\(p[]\) ,其中,对于每个顶点,存储我们命中该顶点的顶点数。