• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
小飞侠
find beauty of life
博客园    首页    新随笔    联系   管理    订阅  订阅
最短路径——Floyd算法
最短路径——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 }

运行结果为:

posted on 2015-11-25 21:37  flypie  阅读(513)  评论(5)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3