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 }
时间: 2024-10-19 11:14:53