【源节点】s,【父节点】or【前驱】
【先进先出的队列】来管理灰色节点集,ENQUEUE, and DEQUEUE.【先进先出】
ENQUEUE(Q, x)
Q[Q.tail]=x
if Q.tail == Q.length
Q.tail = 1
else Q.tail = Q.tail + 1
DEQUEUE(Q)
x = Q[Q.head]
if Q.head = Q.length
Q.head = 1
else Q.head= Q.head +1
return x
【G = (V, E)】用邻接链表所表示,并用为每个节点赋予了其他属性
BFS(G,s)
for each vetex u belong to G.V - {s}
u.color = WHITE
u.d = infinite // 节点u 到及节点s 的距离
u.pi = NIL //u 没有前驱点或者父节点
s.color = GRAY
s.d = 0
s.pi = NIL
Q = empty//具有先进先出特点的队列
ENQUEUE(Q,s)
while Q is not empty
u = DEQUEUE(Q)
for each v is belong to G.Adj[u]
if v.color == white
v.color == GRAY
v.d = u.d + 1
v.pi = u
ENQUEUE (Q, v)
u.color = BLACK
【算法的运行时间】=》【聚合分析】=》【O(V+E)】=》【邻链接表大小的线性函数】
【广度优先树】
下面的伪代码将打印出从源节点s 到目标节点v的最短路径上的所有节点,这里假定BFS已经计算出一颗广度优先树。
PRINT-PATH(G,s, v)
if v == s
print s
elseif v.pi ==NIL//没有前驱节点
print “no path from” s “to” v “exits”
else PRINT-PATH(G,s,v,v.pi)
print v