Floyd算法

//初始化
for(int i = 0; i < size; i ++)
    for(int j = 0; j < size; j ++)
        map[i][j] = (i == j ? 0 : inf);

//核心
for(int k = 1; k <= n; k ++)
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= n; j ++)
            if(map[i][j] > map[i][k] + map[k][j])
                map[i][j] = map[i][k] + map[k][j];

用于计算全源最短路径的较简便算法,复杂度O(n^3)。当然,这不是最快的,还有Johnson算法。Johson算法是目前最高效的在无负环可带负权重的网络中求所有点对最短路径的算法. Johson算法是Bellman-Ford算法, Reweighting(重赋权重)和Dijkstra算法的大综合. 对每个顶点运用Dijkstra算法的时间开销决定了Johnson算法的时间开销. 每次Dijkstra算法(d堆PFS实现)的时间开销是O( E * lgd(V) ). 其中E为边数, V为顶点数, d为采用d路堆实现优先队列ADT. 所以, 此种情况下Johnson算法的时间复杂度是O( V * E * lgd(V) ).

posted @ 2012-08-22 10:15  寒风剑海  阅读(155)  评论(0)    收藏  举报