临接矩阵的存储和输出

#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;
}

发布了77 篇原创文章 · 获赞 72 · 访问量 12万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章