数据结构-图的存储结构-邻接矩阵

数据结构-图的存储结构-邻接矩阵源代码

源代码

#include "stdio.h"    
#include "stdlib.h"   
#include "io.h"  
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXVEX 100 /* 最大顶点数,应由用户定义 */
#define INFINITY 65535 /*infinity->无穷的意思*/

typedef int Status;	/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef char VertexType; /* 顶点类型应由用户定义  */
typedef int EdgeType; /* 边上的权值类型应由用户定义 */

/*存储结构*/
typedef struct
{
	VertexType vexs[MAXVEX]; /* 顶点表 */
	EdgeType arc[MAXVEX][MAXVEX];/* 邻接矩阵,可看作边表 */
	int numNodes, numEdges; /* 图中当前的顶点数和边数  */
}MGraph;

/* 建立无向网图的邻接矩阵表示 */
void CreateMGraph(MGraph *G)
{
	int i, j, k, w;

	printf("输入顶点数和边数:\n");

	/* 输入顶点数和边数 */
	scanf_s("%d,%d", &G->numNodes, &G->numEdges);
	
	/* 读入顶点信息('A'\'B'之类的),建立顶点表 */
	for (i = 0; i <G->numNodes; i++)
		scanf_s(&G->vexs[i]);

	/* 邻接矩阵初始化 */
	for (i = 0; i <G->numNodes; i++)
		for (j = 0; j <G->numNodes; j++)
			/*infinity->无穷->临接矩阵中的无穷代表无权值,0代表无相关的边*/
			G->arc[i][j] = INFINITY;	

	/* 读入numEdges条边,建立邻接矩阵 */
	for (k = 0; k <G->numEdges; k++) 
	{
		printf("输入边(vi,vj)上的下标i,下标j和权w:\n");
		
		/* 输入边(vi,vj)上的i行j列和权w */
		scanf_s("%d,%d,%d", &i, &j, &w);
		G->arc[i][j] = w;
		/* 无向图->矩阵对称 */
		G->arc[j][i] = G->arc[i][j]; 
	}
}

int main(void)
{
	MGraph G;
	CreateMGraph(&G);

	return 0;
}


你可能感兴趣的:(数据结构)