SPFA算法简介

SPFA算法简介

 

SPFA算法采用图的存储结构是邻接表,方法是动态优化逼近法。算法中设立了一个先进先出的队列Queue用来保存待优化的顶点,优化时从此队列里顺序取出一个点w,并且用w点的当前路径D[W]去优化调整其它各点的路径值D[j],若有调整,即D[j]的值改小了,就将J点放入Queue队列以待继续进一步优化。反复从Queue队列里取出点来对当前最短路径进行优化,直至队空不需要再优化为止,此时D数组里就保存了从源点到各点的最短路径值 。

 

    下面举一个实例来说明SFFA算法是怎样进行的:

 

    设有一个有向图G{VE},其中,V{V0,V1,V2,V3,V4}E{<V0,V1>,<V0,V4>,<V1,V2>,<V1,V4>,<V2,V3>,<V3,V4>,<V4,V2>}{2,10,3,7,4,5,6},见下图:

 

 

 

 

 查看更多精彩图片

 

 

 

 

 

算法执行时各步的Queue队的值和D数组的值由下表所示。

 

表一  实例图SPFA算法执行的步骤及结果

 

初始

第一步

第二步

第三步

第四步

第五步

queue

D

queue

D

queue

D

queue

D

queue

D

queue

D

V0

0

V1

0

V4

0

V2

0

V3

0

 

0

 

V4

2

V2

2

 

2

 

2

 

2

 

 

 

5

 

5

 

5

 

5

 

 

 

 

 

9

 

9

 

 

10

 

9

 

9

 

9

 

9

 

算法执行到第五步后,队Queue空,算法结束。源点V0V1的最短路径为2,到V2的最短路径为5,到V3的最短路径为9,到V4的最短路径为9,结果显然是正确的。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值