温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言如何实现Floyd算法

发布时间:2021-05-28 12:17:56 来源:亿速云 阅读:212 作者:小新 栏目:编程语言

这篇文章主要介绍了C语言如何实现Floyd算法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

本文实例为大家分享了C语言实现Floyd算法的具体代码,供大家参考,具体内容如下

#include <stdio.h>  #include <stdlib.h>  #include <limits.h>  #define NUM 4    typedef 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);    }    }  }

感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现Floyd算法”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI