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

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

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

c语言代码实现如下:

#include<stdio.h>
#include<stdlib.h>
#defineMAX_VER_NUM50
typedefcharVertexType;
typedefenum
{
DG,UDG
}GraphType;
typedefstruct
{
VertexTypevexs[MAX_VER_NUM];//顶点向量
intarcs[MAX_VER_NUM][MAX_VER_NUM];//邻接矩阵
intvexnum,arcnum;//图的当前顶点数和弧数
GraphTypetype;//图的种类标志
}MGraph;

//根据名称得到指定顶点在顶点集合中的下标
//vex顶点
//return如果找到,则返回下标,否则,返回0
intgetIndexOfVexs(charvex,MGraph*MG)
{
inti;
for(i=1;i<=MG->vexnum;i++)
{
if(MG->vexs[i]==vex)
{
returni;
}
}
return0;
}

//创建邻接矩阵
voidcreate_MG(MGraph*MG)
{
inti,j,k;
intv1,v2,type;
charc1,c2;
printf("PleaseinputgraphtypeDG(0)orUDG(1):");
scanf("%d",&type);
if(type==0)
{
MG->type=DG;
}
elseif(type==1)
{
MG->type=UDG;
}
else
{
printf("PleaseinputcorrectgraphtypeDG(0)orUDG(1)!");
return;
}
printf("Pleaseinputvexnum:");
scanf("%d",&MG->vexnum);
printf("Pleaseinputarcnum:");
scanf("%d",&MG->arcnum);
getchar();
for(i=1;i<=MG->vexnum;i++)
{
printf("Pleaseinput%dthvex(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("Pleaseinput%dtharcv1(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();
}
}

//打印邻接矩阵和顶点信息
voidprint_MG(MGraphMG)
{
inti,j;
if(MG.type==DG)
{
printf("Graphtype:Directgraph\n");
}
else
{
printf("Graphtype:Undirectgraph\n");
}
printf("Graphvertexnumber:%d\n",MG.vexnum);
printf("Grapharcnumber:%d\n",MG.arcnum);
printf("Vertexset:");
for(i=1;i<=MG.vexnum;i++)
{
printf("%c",MG.vexs[i]);
}
printf("\nAdjacencyMatrix:\n");
for(i=1;i<=MG.vexnum;i++)
{
for(j=1;j<=MG.vexnum;j++)
{
printf("%d",MG.arcs[i][j]);
}
printf("\n");
}
}

//主函数
intmain(void)
{
MGraphMG;
create_MG(&MG);
print_MG(MG);
return0;
}

得到的结果如下图所示:

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

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

发布于 2021-05-30 14:07:22
收藏
分享
海报
0 条评论
165
上一篇:C语言如何实现简单学生管理系统 下一篇:C语言如何实现俄罗斯方块
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码