单源最短路径

要知道单源最短路径的的两种算法--bellman-ford算法以及dijkstra算法之前,首先我们要来了解一种技术:松弛技术。

所谓的松弛技术,实际上用一串代码即可解释:

 RELAX(u,v,w)

       if d(v)> d(u) + w(v,u)

     then d(v) <---- d(u)+w(v,u)

        pai(v)<----u

这就是所谓的松弛一条边(u,v)的过程。意思就是:我们想要找到v的最短路径,那么我们这时候已经知道了到u的最短路径,那么利用u的最短路径+(u,v)的长度, 看这个长度是否比当前v上标明的,到v的最短路径还要短。如果是的话,就把最短的值给d(v),v的父节点给pai(v)

以上就是简单来说的松弛技术。至于为什么要成为“松弛”,算法导论上有解释。

1   bellman-ford算法

2   dijkstra算法

dijkstra算法思路是这样的:

选择在V-S中的一个顶点u,然后将u的所有的出边进行松弛。详细点说就是:先取出集合S中的一个顶点,然后看这个顶点的所有出边,将这个出边另外端的端点进行松弛,即判断:

 if d(v)> d(u) + w(v,u)

     then d(v) <---- d(u)+w(v,u)

        pai(v)<----u

这个过程不断的重复,即知道从源端点到其他所有端点的最短长度。

 

 

posted @ 2013-05-10 15:11  kamendula  阅读(160)  评论(0)    收藏  举报