以下是使用C++实现Floyd算法的代码:

#include<iostream>
#include<algorithm>
#include<climits>

using namespace std;

#define INF INT_MAX
#define V 4

void floydWarshall(int graph[V][V]) {
    int dist[V][V];

    // 初始化距离矩阵
    for (int i = 0; i < V; i++) {
        for (int j = 0; j < V; j++) {
            dist[i][j] = graph[i][j];
        }
    }

    // 更新距离矩阵
    for (int k = 0; k < V; k++) {
        for (int i = 0; i < V; i++) {
            for (int j = 0; j < V; j++) {
                if (dist[i][k] != INF && dist[k][j] != INF && dist[i][k] + dist[k][j] < dist[i][j]) {
                    dist[i][j] = dist[i][k] + dist[k][j];
                }
            }
        }
    }

    // 输出最短路径长度
    for (int i = 0; i < V; i++) {
        for (int j = 0; j < V; j++) {
            if (dist[i][j] == INF) {
                cout << "INF ";
            } else {
                cout << dist[i][j] << " ";
            }
        }
        cout << endl;
    }
}

int main() {
    int graph[V][V] = {{0, 5, INF, 10},
                       {INF, 0, 3, INF},
                       {INF, INF, 0, 1},
                       {INF, INF, INF, 0}};

    floydWarshall(graph);

    return 0;
}

在这个例子中,我们使用一个4x4的矩阵来表示有向网的邻接矩阵。我们使用INF表示两个顶点之间没有直接连接。在main函数中,我们调用floydWarshall函数来计算每一对顶点之间的最短路径长度。输出结果将打印在控制台上

用c++实现Floyd算法对于给定的有向网求每一对顶点之间的最短路径长度

原文地址: https://www.cveoy.top/t/topic/iQfB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录