多源最短路径之Floyd算法
2017-07-30 23:18
381 查看
#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];
}
相关文章推荐
- 最短路径基本介绍(1)--Floyd算法(多源最短路径,五行代码)
- Floyd算法求多源最短路径
- 无权图单源最短路径算法和有权图单源最短路径算法(用到Dijkstra算法)和多源最短路径算法(用到Floyd算法)
- floyd算法求多源最短路径
- POJ 1125 (多源最短路径—Floyd算法)
- 多源最短路径floyd算法
- Floyd算法--多源最短路径
- 医院设置(多源最短路径--Floyd算法)
- 算法基础 - 多源点最短路径(Floyd算法)
- 加权有向图----多源最短路径问题(Floyd算法)
- 多源最短路径Floyd算法
- 多源有权图的最短路径 floyd算法(动态规划能解决负权边)7.1.3
- Floyd算法:用动态规划求解多源(全源)最短路径
- 多源最短路径Floyd算法
- 多源最短路径--floyd算法
- 多源最短路径( Floyd算法)JAVA实现
- 最短路径—Dijkstra算法和Floyd算法
- HLJOJ1015(多源最短路径失真)
- Floyd最短路径算法---多源最短路
- 最短路径—Dijkstra算法和Floyd算法