国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C語言實(shí)現(xiàn)Floyd算法

2020-05-23 13:31:39
字體:
供稿:網(wǎng)友

本文實(shí)例為大家分享了C語言實(shí)現(xiàn)Floyd算法的具體代碼,供大家參考,具體內(nèi)容如下

#include <stdio.h> #include <stdlib.h> #include <limits.h> #define NUM 4  typedef struct MGraph  /* 鄰接表存儲(chǔ)結(jié)構(gòu) */ {   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("各頂點(diǎn)間最短路徑為:/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);   }   } } 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富蕴县| 巴彦淖尔市| 应用必备| 贵德县| 五台县| 宽甸| 大竹县| 连城县| 金山区| 阿克苏市| 清水河县| 天镇县| 六盘水市| 华池县| 昔阳县| 芦山县| 南雄市| 潮安县| 潜江市| 原阳县| 包头市| 吴桥县| 阿克苏市| 黄石市| 黄浦区| 股票| 高要市| 泾阳县| 建昌县| 华宁县| 马关县| 扶风县| 荃湾区| 黄骅市| 富阳市| 浦东新区| 吉隆县| 尖扎县| 巴东县| 泸西县| 滦平县|