#include <stdio.h>
#include <malloc.h>
#define VERTEX_MAX 30
#define MAXSIZE 20
typedef struct
{
int arcs[VERTEX_MAX][VERTEX_MAX]; //定义临接矩阵的长宽
int vexnum,arcnum; //vexnum顶点数,arcnum边数
} MGraph;
/************ 初始化临接矩阵**********/
void creat_MGraph1(MGraph *g)
{
int i,j,n,m; // n是顶点数,m是边数
printf("请输入顶点数和边数:");
scanf("%d%d",&n,&m);
g->vexnum=n; //初始化临接矩阵的顶点数
g->arcnum=m; //初始化临接矩阵的边数
for (i=0;i<n;i++) // 初始化临接矩阵
for (j=0;j<n;j++)
g->arcs[i][j]=0;
while(1)
{
printf("请输入一条边的两个顶点:\n");
scanf("%d%d",&i,&j);
if(i==-1 || j==-1) //当临接矩阵赋值的终止条件
break;
else if(i==j || i>=n || j>=n) //不符合临接矩阵条件的输入
{
printf("输入错误,请重新输入!\n");
}
else
{
g->arcs[i][j]=1; //无项无权数存储数值
g->arcs[j][i]=1;
}
}
}
/************输出临接矩阵***********/
void printMG(MGraph *g)
{
int i,j;
for (i=0;i<g->vexnum;i++)
{
for (j=0;j<g->vexnum;j++)
printf(" %d",g->arcs[i][j]);
printf("\n");
}
printf("\n");
}
int main()
{
MGraph *g1;
g1=(MGraph *)malloc(sizeof(MGraph));
printf("1:创建无向图的邻接矩阵\n\n");
/**********创建临接矩阵********/
creat_MGraph1(g1);
printf("\n此图的邻接矩阵为:\n");
/***********输出临接矩阵********/
printMG(g1);
return 0;
}
临接矩阵的存储和输出
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.