1、在以w为枢纽节点的那一个轮的开始,满足Du[w]<∞(u到w的距离)的节点u知道它的父节点(Tw中)是谁,但不知道它的子节点。因此,每个节点V必须向它的每个近邻u发送消息,告知u是否v是u在Tw中的子节点。当一个节点得知它的近邻中哪些是它在Tw中的子节点时,就可以参加转发W表的过程
2、Neighu是指u的近邻节点。
3、
1)如果x是u的父节点(Tw中),则在w为枢轴节点的那一轮的开始,u将消息<ys,w>发送至x。
2)如果x不是u的父节点(Tw中),则在w为枢轴节点的那一轮的开始,u将消息<nys,w>发送至x。
3)在以w为中心的那一轮中,发送消息<dtab,w,D>。经过Tw的每条边把Dw的值传输到需要该值的每一节点中。
4、
var Su:set of nodes;
Du:array of weights;
Nbu:array of nodes;
begin Su:=Φ;
forall v∈V do
if v=u
then begin Du[v]:=0;Nbu[v]=udef end
else if v Neighu
then begin Du[v]:=Wuv;Nbu[v]:=v end
else begin Du[v]:=∞;Nbu[v]:=udef end;
while Su≠V do
begin pick w from V\Su;
(*construct the tree Tw*)
forall x∈Neighu do
if Nbu[W]=x then send <ys,w> to x
else send <nys,w> to x;
num_recu:=0;(*必须要接收所有邻接节点的消息*)
while num_recu<|Neighu| do
begin receive<ys,w> or <nys,w> message;
num_recu:=num_recu+1
end;
if Du[w]<∞ then
begin if u≠w
then receive <dtab,w,D> from this Nbu[w];
forall x∈Neighu do
if <ys,w> was received from x
then send <dtab,w,D> to x;
forall v∈V do
if Du[w]+D[v]<Du[v] then
begin Du[w]:=Du[w]+D[v];
Nbu[v]:=Nbu[w]
end
end;
Su:=Su∪{w}
end
end