Floyd弗洛伊德算法

floyd算法是一种专门的最短路径算法,时间复杂度O(N^3),可以算多源,又算负值,比较简单,不错。

他的具体方法——

(1)赋最大值,存特别值。

(2)取中间点,又名中转点。

(3)枚举开头结尾,更新小值——

 a[i][j]=a[i][k]+a[k][j];

(4)做一些小改动,按题来。

中心代码如下:

void floyd()//floyd算法算最短路径

{

  for(int k=1; k<=n; k++)//中转点k

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

      if(i!=k)

        for(int j=1; j<=n; j++)//枚举i、j

          if(i!=j&&j!=k&&a[i][k]+a[k][j]<a[i][j])

            a[i][j]=a[i][k]+a[k][j];//更新最小值

}


典型题目:一本通1342:【例4.1】最短路径问题。

再见 ~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。