1. 程式人生 > >使用鄰接矩陣儲存無向圖

使用鄰接矩陣儲存無向圖

問題描述

        使用鄰接矩陣儲存下圖所示無向圖

    

解題思路

        建立一個鄰接矩陣

程式實現

#include <stdlib.h>
#include <stdio.h>

#define MAXVEX 10
/* Status是函式的型別,其值是函式結果狀態程式碼,如OK等 */
typedef int Status;
/* 頂點型別應由使用者定義  */
typedef char VertexType;
/* 邊上的權值型別應由使用者定義 */
typedef int EdgeType;

typedef struct {
	VertexType vex[MAXVEX];
	EdgeType arc[MAXVEX][MAXVEX];
	int numNodes, numEdges;
} MyGraph, *GraphPlus;

void CreateMyGraph(GraphPlus *plus);
int main(void) {
	int i, j;
	GraphPlus plus;
	CreateMyGraph(&plus);
	for (i = 0; i < plus->numNodes; i++) {
		for (j = 0; j < plus->numNodes; j++) {
			printf("%d\t", plus->arc[i][j]);
		}
		printf("\n");
	}
}

void CreateMyGraph(GraphPlus *plus) {
	int i, j, k, w;
	printf("請輸入頂點數和邊數:\n");
	scanf("%d,%d", &i, &j);
	*plus = (GraphPlus)malloc(sizeof(MyGraph));
	getchar();
	getchar();
	(*plus)->numNodes = i;
	(*plus)->numEdges = j;
	// 讀入頂點數
	for (i = 0; i < (*plus)->numNodes; i++) {
		scanf("%c", &(*plus)->vex[i]);
	}
	// 初始化邊陣列
	for (i = 0; i < (*plus)->numNodes; i++) {
		for (j = 0; j < (*plus)->numNodes; j++) {
			(*plus)->arc[i][j]=0;
		}
	}
	// 讀入numEdges條邊,建立鄰接矩陣
	for(k = 0; k < (*plus)->numEdges; k++) {
		printf("輸入邊(vi,vj)上的下標i,下標j:\n");
		scanf("%d,%d", &i, &j);
		(*plus)->arc[i][j] = 1;
		// 因為是無向圖,矩陣對稱
		(*plus)->arc[j][i] = (*plus)->arc[i][j];
	}
}

執行結果