首页 > 编程语言 > 详细

Floyd算法

时间:2017-01-25 17:36:11      阅读:199      评论:0      收藏:0      [点我收藏+]
′Floyd算法则是需要求出任意两点之间的最短路。(保证有最短路,没有负环)
′我们通过dis[i][j]表示从i到j的最短路径。
′然后最开始我们设dis[i][i]=0,dis[i][j]=+oo。
′然后接下来我们尝试从逐个逐个中间点的添加,以扩展路径长度
′理论上该算法也可以采用多次dijkstra算法或者多次Bellman-Ford算法来解决,但直接采用Floyd算法将可以大大减小编程复杂度
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int maxn=100;
 5 const int oo=10000000;
 6 int n,m;
 7 int dis[maxn][maxn];
 8 int main()
 9 {
10     scanf("%d%d",&n,&m);
11     for (int i=1;i<=n;i++) 
12      for (int j=1;j<=n;j++)
13       if (i!=j)
14        dis[i][j]=oo;
15     for (int i=1;i<=m;i++)
16     {
17         int x,y,z;
18         scanf("%d%d%d",&x,&y,&z);
19         dis[x][y]=min(dis[x][y],z);
20     }
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 (dis[i][k]!=oo && dis[k][j]!=oo)
25         dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
26     for (int i=1;i<=n;i++)
27     {
28         for (int j=1;j<=n;j++) printf("%d ",dis[i][j]);
29         printf("\n");
30     }
31     return 0;
32  } 

 

Floyd算法

原文:http://www.cnblogs.com/9pounds15pence/p/6349696.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!