zoukankan      html  css  js  c++  java
  • 算法(图论)——最短路径问题(弗洛伊德算法)

    给定一个带权有向图,计算任意两结点间的最短路径。

    算法思想:遍历每个点到另外点的距离。三层循环,第一层枚举中间点,第二层和第三层枚举起点和终点。

    
    public static void main() {
        int N = 1010, M = 2000010, INF = 1000000000;
    
    
        int[][] d = new int[N][N];    // 存储两点之间的最短距离
    
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= n; j++)
                d[i][j] = i == j ? 0 : INF;
        for (int i = 0; i < m; i++) {
            int a, b, c;
            a = sc.nextInt();
            b = sc.nextInt();
            c = sc.nextInt();
            d[a][b] = d[b][a] = Math.min(c, d[a][b]);
        }
        // floyd 算法核心
        for (int k = 1; k <= n; k++) {
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= n; j++) {
                    d[i][j] = Math.min(d[i][j], d[i][k] + d[k][j]);
                }
            }
        }
    
        System.out.println(d[1][n]);
    }
    
    
  • 相关阅读:
    动物-昆虫:蠼螋
    动物-昆虫:蚰蜒
    动物-软体动物:蜒蚰
    动物-昆虫:蝼蛄
    动物-昆虫:地鳖
    动物:水蛭、蚂蟥
    动物:刺猬
    cmd 下命令
    storm-安装
    python学习之--安装IDE(eclipse+pydev)
  • 原文地址:https://www.cnblogs.com/lippon/p/14117644.html
Copyright © 2011-2022 走看看