先摘抄一段概述的话:
搜索一个图是有序地沿着图的边访问所有顶点。图的搜索算法可以使我们发现图的很多结构信息。许多图的算法在开始时,都是通过搜索输入的图来获取结构信息。另外还有一些图的算法实际上是由基本的图搜索算法经过简单扩充而成。因此,图的搜索技术是图算法领域的核心。
BFS:
是Prim最小生成树和Dijkstra单源最短路的原型。
用三种颜色表示顶点:白色(未访问),灰色(已访问但子节点或许有未访问的白节点),黑色(已访问并子节点也已访问)。以此确保节点只被访问一次。
用一个队列控制访问顺序。
代码模版:
BFS(G,s)
//初始化
for each u from V[G]-{s}
do color[u] <- WHITE
d[u] <- infinity
pre[u] <- NIL
color[s] <- GRAY
d[s] <- 0
pre[s] <- NIL
Q <- empty
//开始bfs
ENQUEUE(Q,s)
while Q != empty
do u <- DEQUEUE(Q)
for each v from Adj[u]
do if color[v] == WH