计算同一目的节点所有最短路径算法,利用了扩散计算。即一种分布式计算,由一个节点初始化,其他节点一接到消息后就加入。
要计算所有节点到节点V0的距离,每一节点u从Du[v0]=∞开始并等候接收消息。节点V0将消息<mydist,v0,0>发送到所有近邻中。当节点u接近到近邻w的消息<mydist,V0m,0>发送到所有近邻中。当节点u接到近邻w的消息<mydist,v0,d>时,其中d+Wuw<Dc[v0]时,u将d+Wuw赋给Du[v0]。并向所有近邻发送消息<mydist,v0,Du[v0]>。
算法如下:
var Du[v0]:weight init ∞;
Nbu[v0]:node init udef;
For node v0 only:
begin Dv0[v0]=0;
forall w∈Neighv0 do send <mydist,v0,0> to w
end
Processing a <mydist,v0,d> message from neighbor w by u;
{<mydist,v0,d>∈Mwu}
begin receive <mydist,v0,d> from w;
if d+Wuw<Du[v0] then
begin Du[v0]:=d+Wuw;Nbu[v0]:=w;
forall x∈Neighu do send <mydist,v0,Du[v0]> to x
end
end