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
  • 相关阅读:
    CSS3弹性盒布局方式
    Vue知识点(面试常见点)
    h5新增加的存储方法
    前端常用插件
    Git 及 GitHub 使用
    Express 框架
    angular.js 教程 -- 实例讲解
    Windows右键添加VSCode启动
    Windows平台SSH登录Linux并使用图形化界面
    10_Linux yum命令
  • 原文地址:https://www.cnblogs.com/tommychok/p/5049937.html
Copyright © 2011-2022 走看看