最短路径——Floyd算法

如何求一张图中任意两顶点之间的最短路径长度,这里写一种最简单的算法——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("\n");
56     }
57 
58     return 0;
59 }

运行结果为:

转载于:https://www.cnblogs.com/flypie/p/4996015.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值