zoukankan      html  css  js  c++  java
  • 最短路之Floyd算法

    /* Floyd算法 */
    
    /************************************************************************
       Floyd算法的核心可用以下代码表示
    
        for (int k = 0; k < n; ++k){
            for (int i = 0; i < n; ++i){
                for (int j = 0; j < n; ++j){
                    if (d[i][j] < INF && d[k][j] < INF){
                        d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
                    }//if
                }//for(j)
            }//for(i)
        }//for(k)
        时间复杂度: O(n^3)
     ************************************************************************/
    
    #include <cstdio>
    
    int n, m;
    const int maxn = 100;
    const int INF = 65535;
    int w[maxn][maxn];
    int d[maxn][maxn];
    int p[maxn][maxn];
    
    void Floyd(){
        for (int i = 0; i < n; ++i){
            for (int j = 0; j < n; ++j){
                d[i][j] = w[i][j];
                p[i][j] = j;
            }//for(j)
        }//for(i)
    
        for (int k = 0; k < n; ++k){
            for (int i = 0; i < n; ++i){
                for (int j = 0; j < n; ++j){
                    if (d[i][j] > d[i][k] + d[k][j]){
                        d[i][j] = d[i][k] + d[k][j];
                        p[i][j] = p[i][k];
                    }
                }//for(j)
            }//for(i)
        }//for(k)
    }
    
    int main()
    {
        int from, to, v;
        scanf("%d%d", &n, &m);
        //初始化权值
        for (int i = 0; i < n; ++i){
            for (int j = 0; j < n; ++j){
                w[i][j] = INF;
            }
        }
        for (int i = 0; i < n; ++i){
            w[i][i] = 0;
        }
        //边的输入
        for (int i = 0; i < m; ++i){
            scanf("%d%d%d", &from, &to, &v);
            w[from][to] = w[to][from] = v;
        }
        Floyd();
    
        for (int i = 0; i < n; ++i){
            for (int j = 0; j < n; ++j){
                printf("%3d", d[i][j]);
            }
            printf("
    ");
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    hrbust 1788
    poj2299 ( bit )
    LA3027(并查集)
    hdu1166 (bit)
    hdu1598(并查集)
    cdoj1215 (并查集)
    hdu2643 ( 第二类斯特灵数 )
    hdu3625 ( 第一类斯特灵数 )
    Uva10066
    怎么处理sqlserver2017部署在winowsDocker上时区无法修改成功的方式,并且可以多创建新的容器调用简单的方式直接使用!
  • 原文地址:https://www.cnblogs.com/tommychok/p/5049937.html
Copyright © 2011-2022 走看看