首页 > 代码库 > Floyed算法 O(N3) x

Floyed算法 O(N3) x

Floyed算法 O(N3)
  简称Floyed(弗洛伊德)算法,是最简单的最短路径算法,可以计算图中任意两点间的最短路径。Floyed的时间复杂度是O (N3),适用于出现负边权的情况。
算法分析&思想讲解:
  三层循环,第一层循环中间点k,第二第三层循环起点终点i、j,算法的思想很容易理解:如果点i到点k的距离加上点k到点j的距离小于原先点i到点j的距离,那么就用这个更短的路径长度来更新原先点i到点j的距离。
我们在初始化时,把不相连的点之间的距离设为一个很大的数,不妨可以看作这两点相隔很远很远,如果两者之间有最短路径的话,就会更新成最短路径的长度。Floyed算法的时间复杂度是O(N3)。
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 
 5 using namespace std;
 6 const int Maxn=1001;
 7 
 8 int maps[Maxn][Maxn];
 9 int ans;
10 int main() {
11     memset(maps,999999,sizeof(maps));
12     int n,m;
13     cin>>n>>m;
14     int he,ta,len;
15     for(int i=1; i<=m; i++) {
16         cin>>he>>ta>>len;
17         maps[ta][he]=maps[he][ta]=len;
18     }
19     int x,y;
20     cin>>x>>y;
21     for(int k = 1; k <= n; k++)
22         for(int i = 1; i <= n; i++)
23             for(int j = 1; j <= n; j++) {
24                 if(maps[i][j]>maps[i][k]+maps[k][j])
25                     maps[i][j]=maps[i][k]+maps[k][j];  //进行更新 
26             }
27 
28     printf("%d",maps[x][y]);
29 }

 

 

 

Floyed算法 O(N3) x