温馨提示×

温馨提示×

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

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

C语言如何实现图的邻接矩阵存储操作

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

小编给大家分享一下C语言如何实现图的邻接矩阵存储操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

利用邻接矩阵容易判定任意两个顶点之间是否有边(或弧)相连,并容易求得各个顶点的度。

c语言代码实现如下:

#include<stdio.h> #include<stdlib.h> #define MAX_VER_NUM 50 typedef char VertexType; typedef enum {  DG,UDG }GraphType; typedef struct {  VertexType vexs[MAX_VER_NUM]; //顶点向量  int arcs[MAX_VER_NUM][MAX_VER_NUM]; //邻接矩阵  int vexnum,arcnum;   //图的当前顶点数和弧数  GraphType type;   //图的种类标志 }MGraph;    //根据名称得到指定顶点在顶点集合中的下标 //vex 顶点 //return 如果找到,则返回下标,否则,返回0 int getIndexOfVexs(char vex,MGraph *MG) {  int i;  for(i=1;i<=MG->vexnum;i++)  {  if(MG->vexs[i]==vex)  {  return i;  }  }  return 0; }   //创建邻接矩阵 void create_MG(MGraph *MG) {  int i,j,k;  int v1,v2,type;  char c1,c2;  printf("Please input graph type DG(0) or UDG(1):");  scanf("%d",&type);  if(type==0)  {  MG->type=DG;  }  else if(type==1)  {  MG->type=UDG;  }  else  {  printf("Please input correct graph type DG(0) or UDG(1)!");  return;  }  printf("Please input vexnum:");  scanf("%d",&MG->vexnum);  printf("Please input arcnum:");  scanf("%d",&MG->arcnum);  getchar();  for(i=1;i<=MG->vexnum;i++)  {  printf("Please input %dth vex(char):",i);  scanf("%c",&MG->vexs[i]);  getchar();  }  //初始化邻接矩阵  for(i=1;i<=MG->vexnum;i++)  {  for (j=1;j<=MG->vexnum;j++)  {  MG->arcs[i][j]=0;  }  }  //输入边的信息,建立邻接矩阵  for(k=1;k<=MG->arcnum;k++)  {  printf("Please input %dth arc v1(char) v2(char):",k);  scanf("%c %c",&c1,&c2);  v1=getIndexOfVexs(c1,MG);  v2=getIndexOfVexs(c2,MG);  if(MG->type==-1)  {  MG->arcs[v1][v2]=MG->arcs[v2][v1]=1;  }  else  {  MG->arcs[v1][v2]=1;  }  getchar();  } }   //打印邻接矩阵和顶点信息 void print_MG(MGraph MG) {  int i,j;  if(MG.type==DG)  {  printf("Graph type: Direct graph\n");  }  else  {  printf("Graph type: Undirect graph\n");  }  printf("Graph vertex number: %d\n",MG.vexnum);  printf("Graph arc number: %d\n",MG.arcnum);  printf("Vertex set:");  for(i=1;i<=MG.vexnum;i++)  {  printf("%c",MG.vexs[i]);  }  printf("\nAdjacency Matrix:\n");  for(i=1;i<=MG.vexnum;i++)  {  for(j=1;j<=MG.vexnum;j++)  {  printf("%d",MG.arcs[i][j]);  }  printf("\n");  } }   //主函数 int main(void) {  MGraph MG;  create_MG(&MG);  print_MG(MG);  return 0; }

得到的结果如下图所示:

C语言如何实现图的邻接矩阵存储操作

以上是“C语言如何实现图的邻接矩阵存储操作”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

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

AI