单源最短路径
要知道单源最短路径的的两种算法--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
这个过程不断的重复,即知道从源端点到其他所有端点的最短长度。
                    
                
                
            
        
浙公网安备 33010602011771号