如何通过Floyd算法实现多源最短路径计算示例?

2026-05-20 01:531阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计531个文字,预计阅读时间需要3分钟。

如何通过Floyd算法实现多源最短路径计算示例?

本例介绍了C++实现的多源最短路径Floyd算法。以下是一种参考实现:

cpp#include #include #include

const int INF=std::numeric_limits::max();

如何通过Floyd算法实现多源最短路径计算示例?

void floydWarshall(std::vector& graph, std::vector& dist) { int n=graph.size(); for (int i=0; i

for (int k=0; k

int main() { std::vector graph={ {0, 3, INF, 7}, {8, 0, 2, INF}, {5, INF, 0, 1}, {2, INF, INF, 0} };

std::vector dist(graph.size(), std::vector(graph.size(), INF));

floydWarshall(graph, dist);

for (int i=0; i

return 0;}

本文实例讲述了C++实现多源最短路径之Floyd算法。分享给大家供大家参考,具体如下:

#include<cstdio> #include<cstring> #include<iostream> #define MAX 999 using namespace std; int n,m; int e[MAX][MAX]; void Init() { for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) { if(i==j) e[i][j]=0; else e[i][j]=MAX; } } void Input() { int a,b,c; for(int i=1; i<=m; ++i) { cin>>a>>b>>c; e[a][b]=c; } } void Floyd() { for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(e[i][j]>e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k][j]; } void Output() { for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) cout<<"dis["<<i<<"]["<<j<<"] = "<<e[i][j]<<endl; } int main() { while(1) { cout<<"n"<<endl;//顶点个数 cin>>n; if(!n) break; cout<<"m"<<endl;//边的个数 cin>>m; Init(); Input(); Floyd(); Output(); } }

Floyd算法是求多点最短路径的一种算法,其核心代码为

void Floyd() { for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(e[i][j]>e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k][j]; }

希望本文所述对大家C++程序设计有所帮助。

本文共计531个文字,预计阅读时间需要3分钟。

如何通过Floyd算法实现多源最短路径计算示例?

本例介绍了C++实现的多源最短路径Floyd算法。以下是一种参考实现:

cpp#include #include #include

const int INF=std::numeric_limits::max();

如何通过Floyd算法实现多源最短路径计算示例?

void floydWarshall(std::vector& graph, std::vector& dist) { int n=graph.size(); for (int i=0; i

for (int k=0; k

int main() { std::vector graph={ {0, 3, INF, 7}, {8, 0, 2, INF}, {5, INF, 0, 1}, {2, INF, INF, 0} };

std::vector dist(graph.size(), std::vector(graph.size(), INF));

floydWarshall(graph, dist);

for (int i=0; i

return 0;}

本文实例讲述了C++实现多源最短路径之Floyd算法。分享给大家供大家参考,具体如下:

#include<cstdio> #include<cstring> #include<iostream> #define MAX 999 using namespace std; int n,m; int e[MAX][MAX]; void Init() { for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) { if(i==j) e[i][j]=0; else e[i][j]=MAX; } } void Input() { int a,b,c; for(int i=1; i<=m; ++i) { cin>>a>>b>>c; e[a][b]=c; } } void Floyd() { for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(e[i][j]>e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k][j]; } void Output() { for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) cout<<"dis["<<i<<"]["<<j<<"] = "<<e[i][j]<<endl; } int main() { while(1) { cout<<"n"<<endl;//顶点个数 cin>>n; if(!n) break; cout<<"m"<<endl;//边的个数 cin>>m; Init(); Input(); Floyd(); Output(); } }

Floyd算法是求多点最短路径的一种算法,其核心代码为

void Floyd() { for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(e[i][j]>e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k][j]; }

希望本文所述对大家C++程序设计有所帮助。