简单的 Floyd 算法模型

Posted soulwinter OIBlogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的 Floyd 算法模型相关的知识,希望对你有一定的参考价值。

*基本思想:传递闭包

所谓传递性,可以这样理解:对于一个节点i,如果j能到i,i能到k,那么j就能到k。求传递闭包,就是把图中所有满足这样传递性的节点都弄出来,计算完成后,我们也就知道任意两个节点之间是否相连。 

  • 初始化

1. 将不可以直接到达的距离(map[i][j])设为 inf (0x3f3f3f3f)

*不设为 int_MAX 是因为使用 0x3f3f3f3f 可以使用 memset() 设置,且两个 inf 相加也不会超出范围。

2. 自己到自己到距离仍为 0.

3. 若 i 可直接到达 j,直接到达的距离即为 map[i][j]

【使用邻接矩阵】

 

*一般初始化

for(i=1;i<=n;i++)   
 for(j=1;j<=n;j++)   
     if(i==j) e[i][j]=0;   
        else e[i][j]=inf;
           

 

 

*双向图初始化

 

 t[p1][p2]=p3;
 t[p2][p1]=p3;//双向边 

 

 

 

 

  • 核心

http://developer.51cto.com/art/201403/433874.htm (参考)

核心代码:

for (int k=1;k<=n;k++) // 中转站的枚举
    for (int i=1;i<=n;i++) // 起点
        for (int j=1;j<=n;j++) // 终点
            if(e[i][j]>e[i][k]+e[k][j])   // 若经过此中转站距离小 
                   e[i][j]=e[i][k]+e[k][j];  // 将 i 到 j 最小距离更改

 

以上是关于简单的 Floyd 算法模型的主要内容,如果未能解决你的问题,请参考以下文章

图论模型--dijstra算法和floyd算法

图论模型---floyd算法

Floyd算法(最短路)

最短路 之 floyd 算法

最短路之Floyd算法

Floyd算法的优缺点分析