如何求一张图中任意两顶点之间的最短路径长度,这里写一种最简单的算法——Floyd算法:
1 #include<stdio.h> 2 3 #define inf 9999 4 5 int main() 6 { 7 int e[10][10]; //用邻接矩阵表示图 8 printf("请输入顶点和边的数目:"); 9 int n,m; 10 scanf("%d%d",&n,&m); 11 for(int i=0;i<n;i++) 12 { 13 for(int j=0;j<n;j++) 14 { 15 if(i==j) 16 { 17 e[i][j]=0; 18 } 19 else 20 { 21 e[i][j]=inf; 22 } 23 } 24 } 25 26 int a,b,c; 27 for(int i=0;i<m;i++) 28 { 29 printf("请输入第%d个边的两个顶点和权值:",i+1); 30 scanf("%d%d%d",&a,&b,&c); 31 e[a][b]=c; 32 } 33 34 //Floyd算法核心语句 35 for(int k=0;k<n;k++) 36 { 37 for(int i=0;i<n;i++) 38 { 39 for(int j=0;j<n;j++) 40 { 41 if(e[i][j]>e[i][k]+e[k][j]) 42 { 43 e[i][j]=e[i][k]+e[k][j]; 44 } 45 } 46 } 47 } 48 49 for (int i = 0; i < n; ++i) 50 { 51 for (int j = 0; j < n; ++j) 52 { 53 printf("%10d",e[i][j]); 54 } 55 printf(" "); 56 } 57 58 return 0; 59 }
运行结果为: