C语言如何实现Floyd算法
作者
这篇文章主要介绍了C语言如何实现Floyd算法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
本文实例为大家分享了C语言实现Floyd算法的具体代码,供大家参考,具体内容如下
#include<stdio.h> #include<stdlib.h> #include<limits.h> #defineNUM4 typedefstructMGraph/*邻接表存储结构*/ { intedges[NUM][NUM]; intn,e; }MGraph; MGraph*build_mgraph(); voidFloyd(MGraph*mgraph); voidPpath(intpath[][NUM],inti,intj); voidDispath(intA[][NUM],intpath[][NUM],intn); intmain(void) { MGraph*mgraph; printf("\n*************************************************************\n"); printf("该图的矩阵表示为:\n"); mgraph=build_mgraph(); printf("\n*************************************************************\n"); printf("各顶点间最短路径为:\n"); Floyd(mgraph); printf("\n*************************************************************\n"); return0; } MGraph*build_mgraph() { inti,j; intnum_e=0; MGraph*mgraph=(MGraph*)malloc(sizeof(MGraph)); intmatrix[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"); } returnmgraph; } voidFloyd(MGraph*mgraph) { intA[NUM][NUM],path[NUM][NUM]; inti,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); } voidPpath(intpath[][NUM],inti,intj) { intk; k=path[i][j]; if(k==-1) return; Ppath(path,i,k); printf("%d,",k); Ppath(path,k,j); } voidDispath(intA[][NUM],intpath[][NUM],intn) { inti,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(A[i][j]==INT_MAX) printf("%d-%dhavenopath",i,j); printf("%d-%d-%d:",i,j,A[i][j]); printf("%d,",i); Ppath(path,i,j); printf("%d\n",j); } } }
感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现Floyd算法”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!
目录
推荐阅读
0 条评论
本站已关闭游客评论,请登录或者注册后再评论吧~