c++中如何实现Floyd最短路径_c++ Floyd最短路径实现方法

Floyd算法通过动态规划求任意两点间最短路径,核心是三重循环更新距离矩阵:disti = min(disti, disti + distk),适用于含负权边但无负权环的图。

c++中如何实现floyd最短路径_c++ floyd最短路径实现方法

在C++中实现Floyd最短路径算法,主要是利用动态规划的思想求解图中任意两点之间的最短距离。该算法适用于带权有向或无向图,能处理负权边(但不能有负权环)。

算法基本思想

Floyd算法通过一个三维递推过程逐步更新任意两点间的最短路径。其核心公式为:

dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])

其中 k 是中间节点,i 和 j 是起始和终止节点。算法枚举所有可能的中间节点 k,尝试通过 k 缩短 i 到 j 的路径。

立即学习“C++免费学习笔记(深入)”;

代码实现步骤

以下是完整的C++实现方法:

1. 定义图的大小和初始化距离矩阵

2. 输入边的信息并填充初始距离值

3. 使用三重循环执行Floyd算法

4. 输出任意两点间的最短路径

#include iostream>

#include

#include

using namespace std;

const int INF = INT_MAX / 2; // 防止加法溢出

void floyd(vector>& dist, int n) {

    for (int k = 0; k

        for (int i = 0; i

            for (int j = 0; j

                if (dist[i][k] != INF && dist[k][j] != INF) {

                    dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);

                }

            }

        }

    }

}

void printDist(const vector>& dist, int n) {

    cout

    for (int i = 0; i

        for (int j = 0; j

            if (dist[i][j] == INF)

                cout

            else

                cout

        }

        cout

    }

}

int main() {

    int n = 4; // 节点数

    vector> dist(n, vector(n, INF));

    // 自身到自身距离为0

    for (int i = 0; i

        dist[i][i] = 0;

    // 添加边:u -> v, 权重 w

    dist[0][1] = 3;

    dist[0][2] = 6;

    dist[1][2] = 4;

    dist[1][3] = 4;

    dist[2][3] = 8;

    floyd(dist, n);

    printDist(dist, n);

    return 0;

}

关键注意事项

Floyd算法的时间复杂度为 O(n³),空间复杂度为 O(n²),适合节点数量不多的图(一般 n ≤ 500)。

使用INT_MAX时要小心溢出问题,建议用一个较大的有限值代替,如 INT_MAX / 2。

若需记录路径而不仅是距离,可额外维护一个 path[i][j] 数组记录中间节点,通过递归回溯输出具体路径。

基本上就这些,实现简单,重点在于初始化和三层循环的顺序。

以上就是c++++中如何实现Floyd最短路径_c++ Floyd最短路径实现方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478228.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 02:44:43
下一篇 2025年12月19日 02:44:57

相关推荐

发表回复

登录后才能评论
关注微信