无向图邻接矩阵的创建代码实现
完整代码如下程序结果
根据图的定义,邻接矩阵的存储需要对顶点和边分别存储。而图的邻接矩阵表示法是一个用一维数组存储顶点信息,用二维数组存储边(弧)的信息。实现这个算法首先要创建无向图,对图进行初始化操作,其次设置三个函数,分别为打印邻接矩阵,判断是否为对称矩阵和打印顶点的出度和入度。具体实现如下所示。
完整代码如下
#include
#include
#define maxnumber 6//顶点数目最大值
typedef struct
{
char vexs[maxnumber];//顶点表
int edges[maxnumber][maxnumber];//邻接矩阵,边表
int n,e;//图的顶点数和弧数
}MGraph;
//创建无向图
void CreateMGraph(MGraph *G)
{
int i,j,k,max=0;
printf("请输入顶点数和边数(格式:顶点数,边数):\n");
scanf("%d,%d",&(G->n),&(G->e));
//图的初始化
for(i=0;in;i++)
{
printf("请输入第%d个顶点的信息:",i+1);
scanf("\n%c",&(G->vexs[i]));
}
printf("\n");
for(i=0;in;i++)
{
for(j=0;jn;j++)
G->edges[i][j]=0;
}
printf("请输入每条边对应的两个顶点的序号(格式为:i,j):\n");
printf("\n");
//顶点信息存入顶点表
for(k=0;ke;k++)
{
printf("请输入第%d个顶点和边的信息:",k+1);
scanf("%d,%d",&i,&j);
G->edges[i][j]=1;
}
}
//打印邻接矩阵
void print_Matrix(MGraph G)
{
int i,j;
printf("\n输出的邻接矩阵为:\n");
printf("\n");
for(i=0;i
printf("%d ",G.edges[i][j]);
if(j==(G.n-1))
printf("\n"); //输出结束
}
}
}
//判断是否为对称矩阵
void check_Matrix(MGraph G)
{
int i,j,a;
for(i=0;i
a=0;
break;
}
}
if(a==1)
printf("矩阵是为对称矩阵\n");
else
printf("矩阵不是为对称矩阵\n");
}
//输出顶点的出入度
void output_Matrix(MGraph G)
{
int i,j,cnt,max1,max2,max=0;
for(i=0,cnt=0;i
if(G.edges[i][j]==1)
cnt++;
if(j==(G.n-1))
printf("%8d的出度为%d\n",i,cnt);
if(max
for(i=0;i
max=cnt;
max2=i;
}
}
}printf("%d的入度最大\n",max2);
}
void main()
{
MGraph G;
CreateMGraph(&G);//创建无向图
print_Matrix(G);//打印邻接矩阵
check_Matrix(G);//判断是否为对称矩阵
output_Matrix(G);//输出顶点的出入度
}
程序结果
![无向图的邻接矩阵创建](https://img-blog.csdnimg.cn/20200730210224951.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODcwMTUyMQ==,size_16,color_FFFFFF,t_70)
|