floyed 算法

floyed 算法/**floyed是用动态规划解决完全最短路的算法,一次调用即可得到任意两个点间的最短路径复杂度为O(n^3),适用于稠密图,顶点数一般在100以内适用结构简单,易于编写floyed算法还可解决传递闭包,判断图是否为连通图在解题时候一般不会只考floyed而是利用floyed得到的结果,进行下一步解题就像二分算法一样,提一

大家好,又见面了,我是你们的朋友全栈君。

/**
    floyed 是用动态规划解决完全最短路的算法,一次调用即可得到任意两个点间的最短路径
    复杂度为O(n^3),适用于稠密图,顶点数一般在100 以内适用

    结构简单,易于编写

    floyed算法还可解决传递闭包,判断图是否为连通图

    在解题时候一般不会只考 floyed 而是利用floyed 得到的结果,进行下一步解题
    就像二分算法一样,提一下竞赛必考二分枚举
*/

const int inf = 0x3f3f3f3f;
const int M = 100;

int map[M][M]; //初始化map[][] = inf;

void addEdge(int u, int v, int w) {
    map[u][v] = w;
    map[v][u] = w; //floyed 也可以解决有向图
}

void floyed(int nv) {
    int i, j, k;
    for (i=1; i<=nv; i++)
        for (j=1; j<=nv; j++)
            for (k=1; k<=nv; k++)
                map[i][j] = min(map[i][j], map[i][k]+map[k][j]);

}

/**
    注意:连接矩阵添边都应该注意是否有重边,floyed 算法既可以解决有向图又可以解决
    无向图,但是不能解决带负权回路的图
*/

收藏于 2011-11-18
来自于百度空间

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149044.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月25日 下午8:36
下一篇 2022年6月25日 下午8:36


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号