臨接矩陣的存儲和輸出

#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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章