广度优先搜索

【源节点】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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值