数据结构——图的存储(邻接矩阵)

版权声明:都是平时的作业 欢迎评论点赞哦 https://blog.csdn.net/Getugly/article/details/84670302

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

#define MAX 20
#define MAX_VERTEX_NUM 20
#define INF -1
#define error -1

//邻接矩阵
typedef struct ArcCell
{
	int adj;
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

typedef struct
{
	int vexnum,arcnum;  //点数和边数
	AdjMatrix arcs;  //邻接矩阵
	char vexs[MAX][MAX];
}MGraph;

//函数原型:
void CreateUDN(MGraph &G);
void show(MGraph G);
int LocatVex(MGraph G,char v[MAX]);

int main()
{
	MGraph G;
	CreateUDN(G);
	show(G);
	return 0;
}

void CreateUDN(MGraph &G)
{
	int i,j,v;
	char v1[MAX],v2[MAX];
	printf("请输入顶点的个数: ");
	scanf("%d",&G.vexnum);
	printf("请输入边的总数: ");
	scanf("%d",&G.arcnum);
	for(i=0;i<G.vexnum;i++)
	{
		printf("请输入第%d个顶点的名称: ",i+1);
		scanf(" %s",G.vexs[i]);
	}
	for(i=0;i<G.vexnum;i++)  //初始化
	{
		for(j=0;j<G.vexnum;j++)
		{
			G.arcs[i][j].adj=INF;
		}
	}
	for(v=0;v<G.arcnum;v++)
	{
		printf("请输入第一个顶点: ");
		scanf("%s",&v1);
		i=LocatVex(G,v1);
		printf("请输入第二个顶点: ");
		scanf("%s",&v2);
		j=LocatVex(G,v2);
		if(i!=error && j!=error)
		{
			printf("请输入两点之间的权值: ");
			scanf("%d",&G.arcs[i][j].adj);
			G.arcs[j][i]=G.arcs[i][j];
		}
		else  exit(0);
	}
}

int LocatVex(MGraph G,char v[MAX])
{
	int i;
	for(i=0;i<G.vexnum;i++)
	{
		if(strcmp(G.vexs[i],v)==0)
		{
			return i;
		}
	}
	return error;
}

void show(MGraph G)
{
	int i,j;
	for(i=0;i<G.vexnum;i++)
	{
		for(j=0;j<G.vexnum;j++)
		{
			printf("%3d",G.arcs[i][j].adj);
		}
		printf("\n");
	}
}

猜你喜欢

转载自blog.csdn.net/Getugly/article/details/84670302