美文网首页
Warshall算法和Floyd算法

Warshall算法和Floyd算法

作者: ZuYuan | 来源:发表于2019-07-19 22:20 被阅读0次
  • 归属:动态规划

  • 名词:

    1. 传递闭包:存在一个有向图,能用布尔邻接矩阵表示(1、0)。存在一个矩阵,它能够给定图的顶点之间是否存在任意长度的有向路径,这种矩阵称为有向图的传递闭包,是我们能够在常数时间内判断第j个顶点是否可从第i个顶点到达。
  • 作用:

    1. Warshall算法可以计算一个布尔邻接矩阵的传递闭包。
    2. Floyd算法可以计算加权连通图的每个顶点到其它所有顶点之间的最短距离,使用矩阵表示。
  • 思想:

    1. Warshall算法:存在 (a,b)=1 (b,c)=1,则(a,c)=1,以此为基础遍历完整个矩阵,如图。


      Wsrshall算法
    2. Floyd算法:若一个点到另外一个点没有路径,则把它的值视为无穷大,这里以10000做代替。


      Floyd算法
  • 算法:
    /**
     * Warshall算法
     * @param paths 布尔有向图矩阵
     * @param n 几阶矩阵
     * @return 传递闭包
     */
    public static boolean[][] warshall(boolean[][] paths, int n) {
        boolean beforePaths[][] = paths.clone();
        boolean nowPaths[][] = paths.clone();
        for (int k = 0; k < n; k++) {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    //这里的k代替了c
                    nowPaths[i][j] = beforePaths[i][j] || beforePaths[i][k] && beforePaths[k][j];
                    beforePaths = nowPaths.clone();
                }
            }
        }
        return nowPaths;
    }

    /**
     * Floyd算法
     * @param paths 加权连通图
     * @param n 几阶矩阵
     * @return 表示任意两个点之间的最短路径的距离矩阵
     */
    public static int[][] floyd(int[][] paths, int n) {
        int[][] d = paths.clone();
        for (int k = 0; k < n;k++) {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    d[i][j] = Math.min(d[i][j], d[i][k] + d[k][j]);
                }
            }
        }
        return d;
    }

相关文章

  • 直观理解:任意两点间最短路径——Floyd算法

      本文将介绍另外一种最短路径算法——Floyd-Warshall算法,简称为Floyd算法,该算法的发明者为19...

  • Warshall算法和Floyd算法

    归属:动态规划 名词:传递闭包:存在一个有向图,能用布尔邻接矩阵表示(1、0)。存在一个矩阵,它能够给定图的顶点之...

  • JavaScript 实现最短路径算法

    在求两点之间的最短距离最常用的算法:Dijkstra 算法 和 Floyd-Warshall 算法。 1、Dijk...

  • Aha! Algorithms - Floyd-Warshall

    《啊哈!算法》第 6 章第 1 节,Floyd-Warshall 算法求最短路径的 Swift 实现。 问题 4 ...

  • Swift最短路径之Floyd-Warshall算法

    Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离。如下图,表示一个用邻接矩阵表示...

  • turtle Floyd-Warshall(Graph)

    最短路径算法 Floyd-Warshall(打开新窗口)的算法是用来寻找具有正负边权重的加权图中的最短路径。该算法...

  • Floyd-Warshall算法

    初始化 从row到col的距离,row为行数,col为列数 例如:2到3的距离=3 以 1 为中介点 3到2=ma...

  • 初级算法-floyd-warshall

    问题描述 城市有的之间有路,有的没有,所有信息用矩阵存储。if 1到2路程为2,那么e[1][2]. 问题解释 解...

  • 理解Floyd-Warshall算法

    我们之前分别讨论了Dijkstra算法和Bellman-Ford算法,它们解决的都是单源最短路径问题。本文讨论的F...

  • Johnson 全源最短路径算法

    前言 上一篇文章已经阐述了Floyd-Warshall算法,适用于存在负权重路径的稠密图。本文讲述的算法适用于稀疏...

网友评论

      本文标题:Warshall算法和Floyd算法

      本文链接:https://www.haomeiwen.com/subject/vxselctx.html