最短路——floyd算法

求每一对顶点的最短路径。

枚举经每一个点中转其他的两点之间路径是否缩短,时间复杂度为o(n^3)。

核心代码如下:(map为存图的数组,无连接的更新为inf)

for(k=1;k<=n;k++)    

      for(i=1;i<=n;i++)          

             for(j=1;j<=n;j++)           

                  f(Map[i][j]>Map[i][k]+Map[k][j])Map[i][j]=Map[i][k]+Map[k][j];

该算法可以处理负权,但无法处理负权回路。

错误写法:

for(i=1;i<=n;i++)       

      for(j=1;j<=n;j++)         

              for(k=1;k<=n;k++)           

                       if(Map[i][j]>Map[i][k]+Map[k][j])Map[i][j]=Map[i][k]+Map[k][j]; 

先枚举中转点会导致计算顺序的错误。

注意:赋初值是无穷大不要太大,否则两两相加会变成负数。

你可能感兴趣的:(最短路——floyd算法)