ACM算法竞赛——floyd算法(模板)

2022-05-18 10:35:21 浏览数 (2)

Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。(百度百科)

Floyd算法用于求多源汇最短路问题,通俗来讲就是求图中任意两点间的最短距离

时间复杂度: O(n^3)

代码语言:txt复制
初始化:
    for (int i = 1; i <= n; i    )
        for (int j = 1; j <= n; j    )
            if (i == j) d[i][j] = 0;
            else d[i][j] = INF;

// 算法结束后,d[a][b]表示a到b的最短距离
void 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] = min(d[i][j], d[i][k]   d[k][j]);
}

0 人点赞