无向图邻接矩阵的创建代码实现
根据图的定义,邻接矩阵的存储需要对顶点和边分别存储。而图的邻接矩阵表示法是一个用一维数组存储顶点信息,用二维数组存储边(弧)的信息。实现这个算法首先要创建无向图,对图进行初始化操作,其次设置三个函数,分别为打印邻接矩阵,判断是否为对称矩阵和打印顶点的出度和入度。具体实现如下所示。
完整代码如下
#include<stdio.h> #include<malloc.h> #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;i<G->n;i++) { printf("请输入第%d个顶点的信息:",i+1); scanf("\n%c",&(G->vexs[i])); } printf("\n"); for(i=0;i<G->n;i++) { for(j=0;j<G->n;j++) G->edges[i][j]=0; } printf("请输入每条边对应的两个顶点的序号(格式为:i,j):\n"); printf("\n"); //顶点信息存入顶点表 for(k=0;k<G->e;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<G.n;i++) //输出对应的领接矩阵 { for(j=0;j<G.n;j++) { 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<G.n;i++) //用于判断是否为对称矩阵 for(j=0;j<G.n;j++) { if(G.edges[i][j]==G.edges[j][i]) a=1; else { 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<G.n;i++) //用于输出顶点的出度 { for(j=0;j<G.n;j++) { if(G.edges[i][j]==1) cnt++; if(j==(G.n-1)) printf("%8d的出度为%d\n",i,cnt); if(max<cnt) { max=cnt; max1=i; } } } printf("%3d的出度最大\n",max1); for(j=0,cnt=0,max=0;j<G.n;j++) //用于输出顶点的入度 { for(i=0;i<G.n;i++) { if(G.edges[i][j]==1) cnt++; if(i==(G.n-1)) printf("%8d的入度为%d\n",j,cnt); if(max<cnt) { max=cnt; max2=i; } } }printf("%d的入度最大\n",max2); } void main() { MGraph G; CreateMGraph(&G);//创建无向图 print_Matrix(G);//打印邻接矩阵 check_Matrix(G);//判断是否为对称矩阵 output_Matrix(G);//输出顶点的出入度 }
程序结果