本文实例讲述了C++实现多源最短路径之Floyd算法。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#include<cstdio> #include<cstring> #include<iostream> #define MAX 999 using namespace std; int n,m; int e[MAX][MAX]; void Init() { for ( int i=1; i<=n; ++i) for ( int j=1; j<=n; ++j) { if (i==j) e[i][j]=0; else e[i][j]=MAX; } } void Input() { int a,b,c; for ( int i=1; i<=m; ++i) { cin>>a>>b>>c; e[a][b]=c; } } void Floyd() { for ( int k=1; k<=n; k++) for ( int i=1; i<=n; i++) for ( int j=1; j<=n; j++) if (e[i][j]>e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k][j]; } void Output() { for ( int i=1; i<=n; ++i) for ( int j=1; j<=n; ++j) cout<< "dis[" <<i<< "][" <<j<< "] = " <<e[i][j]<<endl; } int main() { while (1) { cout<< "n" <<endl; //顶点个数 cin>>n; if (!n) break ; cout<< "m" <<endl; //边的个数 cin>>m; Init(); Input(); Floyd(); Output(); } } |
Floyd算法是求多点最短路径的一种算法,其核心代码为
1
2
3
4
5
6
7
8
|
void Floyd() { for ( int k=1; k<=n; k++) for ( int i=1; i<=n; i++) for ( int j=1; j<=n; j++) if (e[i][j]>e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k][j]; } |
希望本文所述对大家C++程序设计有所帮助。