Floyd-warshall 算法 //最短路

 
 
  • 适用范围:无负权回路即可,边权可正可负,运行一次算法即可求得任意两点间最短路
  • 时间复杂度:O(n^3)
最短路径:一个图里有很多边,每条边有权值,两点之间的权值最小的路径。 负权回路:一个环(某点出发走了一圈还回到原点)里的权值和为负数(环里的每个权值可正可负,但和为负)。 首先,存在负权回路的图里没有最短路,因为只要一直走这个回路就可以达到无限短。所以以下算法都是基于无负权回路的前提下。 实际题目::https://blog.csdn.net/LMengi000/article/details/80149907

定义dp[i][j]:i到j的最短路径,则在初始化dp的原图数据后,核心代码就这么短


void Floyd() //用来寻找任意两点间的最短路径 (无向图)

{

    for(int k=1;k<=n;k++)
    {
     for(int i=1;i<=n;i++)
     {
       for(int j=1;j<=n;j++)
       {
         dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
       }
     }
    }
}

 

猜你喜欢

转载自blog.csdn.net/lmengi000/article/details/80149990