zoukankan      html  css  js  c++  java
  • Floyed算法

          从有向图的带权的邻接矩阵 cost出发,对有向图的n个顶点加以编号,若从i到j有弧(i=1,2,...,n,j=1,2,...,n),则从i到j 存在一条长度为cost(i,j)的路线。但该路径不一定是最短路径,尚需修改,修改的方法是进行n次试探。首先考虑路径(i,1,j)(即在i,j中插进点1),看〈i,1〉,〈1,j〉是否存在,若存在,再比较 (i,j)与(i,1,j)这两条路径,长度较短者为当前求得的最短路径。于是这条求得的最短路径的 中间点序号不大于1。然后再在各对点i,j中插进一个点2,看〈i,...,2〉,〈2,...,j〉是否存在, 若不存在,那么当前的最短路径仍是上次求得的中间点序号不大于1的最短路径;若存在,则将 (i,...,2,j)的路径与前次求出的中间点序号不大于1的最短路径进行比较,取长度较短者 为当前的最短路径。这样,这次求得的最短路径的中间点序号不大于2。......,依次类推,直至求得 从i到j的最短路径。

     Floyed的主程序段很精简,就是3重循环。

        for (k = 0; k < n; k ++)

                  for (i = 0; i < n; i ++)

                         if (i != k) for (j = 0; j < n; j ++)

                                if ((j != i && j != k) && (map[i][k] + map[k][j] < map[i][j]))

                                       map[i][j] = map[i][k] + map[k][j];

    附个模板:

     1 #include<cstdio>
     2 using namespace std;
     3 #define MAXN 1001
     4 #define INF 0x7fffff
     5 int Network[MAXN][MAXN];
     6 int main()
     7 {
     8     int n,m;
     9     scanf("%d%d",&n,&m);
    10     for(int i=1;i<=n;i++)
    11       for(int j=1;j<=n;j++)
    12         Network[i][j]=INF;
    13     for(int i=1;i<=m;i++)
    14       {
    15           int vi,vj,weight;
    16           scanf("%d%d%d",&vi,&vj,&weight);
    17           Network[vi][vj]=weight;
    18           Network[vj][vi]=weight;
    19       }
    20     for(int k=1;k<=n;k++)
    21       for(int i=1;i<=n;i++)
    22         for(int j=1;j<=n;j++)
    23           if(Network[i][j]>Network[i][k]+Network[k][j])
    24             Network[i][j]=Network[i][k]+Network[k][j];
    25     int numa,numb;
    26     scanf("%d%d",&numa,&numb);
    27     printf("%d",Network[numa][numb]);
    28     return 0;
    29 }
  • 相关阅读:
    破周三,前不着村后不着店的,只好学pandas了,你该这么学,No.9
    周一不睡觉,也要把pandas groupy 肝完,你该这么学,No.8
    大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7
    链接
    音乐
    术语
    新闻
    我的文章分类
    我的代码规则
    Jenkins 访问特别慢,且不消耗服务器资源
  • 原文地址:https://www.cnblogs.com/wsdestdq/p/6725142.html
Copyright © 2011-2022 走看看