失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 最短路径佛洛依德

最短路径佛洛依德

时间:2019-04-30 01:41:36

相关推荐

最短路径佛洛依德

佛洛依德

#include <stdio.h>#define NUM 5 //顶点数#define MV 65536 //最大值int P[NUM][NUM];//辅助数组,记录边的数组,不过是正序的,P【i】【j】从i到j的最短路径的第二个顶点,但不一定是j,只有初//始化的时候才一定是jint A[NUM][NUM];//记录每条路径的权值之和/*用邻接矩阵定义图,每个元素的数字代表相应边的权值,且注意邻接矩阵具有对称性*/int matrix[NUM][NUM] ={{ 0, 10, MV, 30, 100 },{ MV, 0, 50, MV, MV },{ MV, MV, 0, MV, 10 },{ MV, MV, 20, 0, 60 },{ MV, MV, MV, MV, 0 },};/*sv表示源点*/void Floyd(int sv){int i = 0;int j = 0;int k = 0;for (i = 0; i < NUM;i++){//初始化for (j = 0; j < NUM;j++){A[i][j] = matrix[i][j];P[i][j] = j;}}for (i = 0; i < NUM;i++){//i作为中转站,在最外层(关键点在dijkstra增加的)for (j = 0; j < NUM;j++){//目标是从j到kfor (k = 0; k < NUM;k++){if (A[j][i] + A[i][k] < A[j][k]){A[j][k] = A[j][i] + A[i][k];P[j][k] = P[j][i];//更新第二个顶点}}}}for (i = 0; i < NUM;i++){for (j = 0; j < NUM;j++){int p = -1;printf("%d->%d:%d\n",i,j,A[i][j]);printf("%d",i);p = i;do{p = P[p][j];printf("->%d",p);} while (p != j);printf("\n");}}}int main(){Floyd(0);system("PAUSE");return 0;}

如果觉得《最短路径佛洛依德》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。