#define MinInt 0
#define MVNum 100
#define OK 1
#define ERROR -1
#include<stdio.h>
// 图的存储结构
typedef char VerTexType;
typedef int ArcType;
typedef int Status;
typedef struct  {
	VerTexType vexs[MVNum];
	ArcType arcs[MVNum][MVNum];// 邻接矩阵
	int vexnum,arcnum;
} AMGraph;
// 确定当前点在点数组中的位置
Status LocateVex(AMGraph G,int v1) {
	int index=-1;
	for(int i=0; i<G.vexnum; i++) {
		if(i==v1) {
			index=i;
			break;
		}
	}
	return index;
}
// 邻接矩阵表示法创建无向图
Status CrateUDN(AMGraph &G) {
	int v1,v2;
	int num=0;
	char c;
	printf("请依次输入顶点数和边数:\n");
//输入顶点数和边数
	scanf("%d%d",&G.vexnum,&G.arcnum);
// 遍历输入顶点信息,遇到#结束输入
	printf("请输入字符数组,以#作为结束标志:\n");
	while ((c = getchar()) != '#') {
		G.vexs[num++] = c;
	}
	G.vexs[num] = '\0';  // 在字符数组末尾添加结束符
	printf("添加成功");
// 验证结果
	for(int i=0; i<num; i++) {
		printf("%c",G.vexs[i]);
	}

// 初始化邻接矩阵
	for(int j=0; j<G.vexnum; j++) {
		for(int i=0; i<G.vexnum; i++) {
			G.arcs[j][i]=MinInt;
		}
	}
printf("\n初始化成功");
printf("\n请依次输入各条边的信息:(以,隔开)\n");
// 遍历输入顶点信息,并将其存入邻接矩阵中
	for(int k=0; k<G.arcnum; k++) {
		scanf("%d,%d",&v1,&v2);
		int w=1;
// 获取顶点在vexs数组中的下标
		int i=LocateVex(G,v1);
		int j=LocateVex(G,v2);
// 修改邻接矩阵中的数据
		G.arcs[i][j]=w;
		G.arcs[j][i]=G.arcs[i][j];
	}
	return OK;
}
// 输出邻接矩阵
void traverseOut(AMGraph G) {
	for(int i=0; i<G.vexnum; i++) {
		for(int j=0; j<G.vexnum; j++) {
			printf("%d  ",G.arcs[i][j]);
		}
		printf("\n");
	}
}

int main() {
	AMGraph G;
	CrateUDN(G);
	printf("邻接矩阵为:\n");
	traverseOut(G);
	printf("%c",G.vexs[0]);
	return 0;
}