Floyd算法C语言实现
来源:互联网 发布:js怎么定义多维数组 编辑:程序博客网 时间:2024/05/11 01:39
<pre name="code" class="objc">#include <stdio.h>#include <stdlib.h>#include <limits.h>#define NUM 4typedef struct MGraph/* 邻接表存储结构 */{ int edges[NUM][NUM]; int n,e;} MGraph;MGraph *build_mgraph();void Floyd(MGraph *mgraph);void Ppath(int path[][NUM], int i, int j);void Dispath(int A[][NUM], int path[][NUM], int n);int main(void){ MGraph *mgraph; printf("\n*************************************************************\n"); printf("该图的矩阵表示为:\n"); mgraph=build_mgraph(); printf("\n*************************************************************\n"); printf("各顶点间最短路径为:\n"); Floyd(mgraph); printf("\n*************************************************************\n"); return 0;}MGraph *build_mgraph(){ int i,j; int num_e=0; MGraph *mgraph=(MGraph *)malloc(sizeof(MGraph)); int matrix[NUM][NUM]={{0,5,INT_MAX,7}, {INT_MAX,0,4,2}, {3,3,0,2}, {INT_MAX,INT_MAX,1,0}}; for(i=0;i<NUM;i++) { for(j=0;j<NUM;j++) { mgraph->edges[i][j]=matrix[i][j]; if(matrix[i][j]!=0 && matrix[i][j]!=INT_MAX) num_e++; } } mgraph->n=NUM; mgraph->e=num_e; printf("node=%d;edges=%d\n",mgraph->n,mgraph->e); for(i=0;i<NUM;i++) { for(j=0;j<NUM;j++) { if(mgraph->edges[i][j]!=INT_MAX) printf("%3d",mgraph->edges[i][j]); else printf("%3c",'&'); } printf("\n"); } return mgraph;}void Floyd(MGraph *mgraph){ int A[NUM][NUM],path[NUM][NUM]; int i,j,k; for(i=0;i<mgraph->n;i++) { for(j=0;j<mgraph->n;j++) { A[i][j]=mgraph->edges[i][j]; path[i][j]=-1; } } for(k=0;k<mgraph->n;k++) { for(i=0;i<mgraph->n;i++) { for(j=0;j<mgraph->n;j++) { if(A[i][k]!=INT_MAX && A[k][j]!=INT_MAX && A[i][j]>A[i][k]+A[k][j]) { A[i][j]=A[i][k]+A[k][j]; path[i][j]=k; } } } } Dispath(A,path,mgraph->n);}void Ppath(int path[][NUM], int i, int j){ int k; k=path[i][j]; if(k==-1) return; Ppath(path,i,k); printf("%d,",k); Ppath(path,k,j);}void Dispath(int A[][NUM], int path[][NUM], int n){ int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(A[i][j]==INT_MAX) printf("%d-%d have no path",i,j); printf("%d-%d-%d: ",i,j,A[i][j]); printf("%d,",i); Ppath(path,i,j); printf("%d\n",j); } }}
0 0
- Floyd算法C语言实现
- Floyd算法——C语言实现
- C语言实现图的最短路径Floyd算法
- floyd算法(C语言 邻接表)
- 数据结构之---C语言实现最短路径之Floyd(弗洛伊德)算法
- 最短路径Floyd算法(C语言)
- Java实现Floyd算法
- floyd算法实现
- Floyd算法Cpp实现
- PHP实现Floyd算法
- python实现Floyd算法
- Floyd算法的C&python实现及对比
- 多源最短路径 Floyd 算法(有向图) C实现 ~
- C语言实现银行家算法
- C语言实现递归算法
- C语言实现MD5算法!
- 排序算法(C语言实现)
- CRC16算法实现(C语言)
- 关闭mac开机当的一声的终极方法
- 2016-6-6
- 2016山东省赛总结
- Java 设计模式——外观模式
- 关于页面内容复制拷贝的小技巧
- Floyd算法C语言实现
- 深入理解RDD
- Vmware上Centos上网问题小记
- caffe源码学习(六) 自定义层
- c++实验7-2
- windows install libusb driver
- c++第七次作业
- poj3009DFS
- 递归-小游戏(算法基础 第3周)