多源最短路径Floyd算法
来源:互联网 发布:加工切削参数计算软件 编辑:程序博客网 时间:2024/05/16 05:23
设d[i][j]为顶点 i 与顶点 j 的最短路径,设 k为i与j之间的点,那么d[i][j] = d[i][k] + d[k][j];
算法核心为:
void floyd(){ int i,j,k; for(k = 1; k <= n; k++) { for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { if(d[i][k] + d[k][j] < d[i][j]) { d[i][j] = d[i][k] + d[k][j]; path[i][j] = k; } } } } }path[i][j]记录的是最短路径中到j的上一个点,初始化为-1,若最后path[i][j] = -1,说明j是与源点i相邻的点
例:
#include<iostream>#include<vector>#include<windows.h>using namespace std;#define NUM 101#define INF 99999999 int d[NUM][NUM];int path[NUM][NUM];int n,m;void floyd(){ int i,j,k; for(k = 1; k <= n; k++) { for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { if(d[i][k] + d[k][j] < d[i][j]) { d[i][j] = d[i][k] + d[k][j]; path[i][j] = k; } } } } }void findPre(int i,int j){cout<<j<<"-"; if(path[i][j] == -1) { cout<<i;return; } else { findPre(i,path[i][j]); } }int main(){ int i,j; scanf("%d%d",&n,&m); for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { d[i][j] = INF; path[i][j] = -1; } } for(i = 1; i <= m; i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); d[a][b] = d[b][a] = c; } floyd(); for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { if(d[i][j] < INF && i == 1 && j != 1) { printf("%d到%d的最短路径为:%d ",i,j,d[i][j]); printf("路径为:"); findPre(i,j);printf("\n"); } } } system("pause"); return 0; }
0 0
- 多源最短路径floyd算法
- Floyd 多源最短路径算法
- 多源最短路径Floyd算法
- Floyd算法--多源最短路径
- Floyd多源最短路径算法
- 多源最短路径--floyd算法
- floyd算法 多源最短路径
- 多源最短路径--Floyd-Warshall算法
- 多源最短路径算法---Floyd-Warshall
- 多源最短路径之Floyd算法
- POJ 1125 (多源最短路径—Floyd算法)
- 多源最短路径( Floyd算法)JAVA实现
- 医院设置(多源最短路径--Floyd算法)
- 多源最短路径问题-弗洛伊德(Floyd)算法
- Floyd算法求最短路径
- 全源最短路径算法-Floyd
- Floyd算法求多源最短路径
- Floyd算法(记录路径)
- C语言文件操作之fgets()
- linux socket编程之socket()函数介绍
- 【备忘】JavaEE系统架构师学习路线之高级篇
- Android Studio 进行单元测试
- CSS树形菜单
- 多源最短路径Floyd算法
- java 绘制心
- dbms_flashback
- 常见对象_正则表达式的组成规则
- QGIS2.3+VS2010+Win7编译
- socket中的select 、 poll、epoll的区别
- 简单的Python类
- 转载]决策树ID3、C4.5、CART科普
- 百度杯”CTF比赛(十一月场)