C++实现多源最短路径之Floyd算法示例
2017-08-04 11:52
495 查看
本文实例讲述了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++程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- 多源最短路径Floyd算法邻接矩阵形式C++实现
- 多源最短路径Floyd算法邻接矩阵形式C++实现
- 图Floyd 多源最短路径求解 C++实现
- Floyed多源节点--最短路径C++实现与实现打印路径
- 用c++代码实现贪心算法求解最短路径问题
- 图的最短路径(C++实现)
- 迪杰斯特拉算法求最短路径 C++代码实现
- 最短路径问题——Dijkstra算法(C++实现)
- BFS和DFS求最短路径的C++代码实现
- 图的点对最短路径算法(C++实现)
- 关于pgrouting 的 最短路径 思路解析 以及C++代码实现
- 数据结构与算法——无权最短路径算法的C++实现
- 数据结构与算法——最短路径Dijkstra算法的C++实现
- 图的拓扑排序、关键路径、最短路径算法 -- C++实现
- 单源点最短路径 c++实现 分支限界算法
- 每对顶点间的最短路径C++实现
- 图(有向图,无向图)的邻接矩阵表示C++实现(遍历,拓扑排序,最短路径,最小生成树) Implement of digraph and undigraph using adjacency matrix
- 数据结构:最短路径(Dijkstra c++实现)
- 每对顶点间的最短路径算法时间复杂度改进C++实现
- 图功能的实现C++(最短路径,关键路径,拓扑排序,关节点,~~~~~~~~~~等等)