Coder Space

PKU 2387 Til the Cows Come Home --- 两点间最短路径,SPFA算法

两点间的最短路径,SPFA算法求单源最短路径可得。 当然用Dijkstra或Bellman_Ford也是可以的。


SPFA算法简介
 

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

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

     设有一个有向图G={V,E},其中,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,结果显然是正确的。

本题源代码

posted on 2010-05-26 01:10 David Liu 阅读(286) 评论(0)  编辑 收藏 引用 所属分类: 图论


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


My Links

Blog Stats

常用链接

留言簿

文章分类

文章档案

搜索

最新评论