数组实现邻接矩阵

数组实现树的邻接矩阵

#include
#include
#define MaxVNum 100
typedef char VertexTYpe; //定义顶点类型
typedef  int EdgeType;//定义边的权值为整形


//邻接矩阵类型
typedef struct  ArcCell {
	EdgeType adj;//顶点,用来存放边的权值
}adjMatrix[MaxVNum][MaxVNum];

//图类型
typedef struct Mgraph {
	VertexTYpe Vexs[MaxVNum];//定义顶点表
	adjMatrix arcs;  /*邻接矩阵*/
	int vexnum;
	int arcnum;
	void CreateGraph(Mgraph*& ga);
	int LocateVer(Mgraph* ga, VertexTYpe e);
}*GraphPointer;
int Mgraph::LocateVer(Mgraph* ga, VertexTYpe e) {
	for (int i = 0; i < ga->vexnum; i++) {
		if (ga->Vexs[i] == e)return i;
	}
	return -1;
}
void Mgraph::CreateGraph(Mgraph*& ga) {
	VertexTYpe v1, v2;
	EdgeType e;
	ga = (GraphPointer)malloc(sizeof(Mgraph));
	std::cout << "请输入图的顶点个数和边的个数,中间用空格间隔" << std::endl;
	std::cin >> ga->vexnum >> ga->arcnum;
	fflush(stdin);
	std::cout << "请依次输入节点信息 中间用空格间隔" << std::endl;
	/*此处用户异常输入处理省略*/
		for (int i = 0; i < ga->vexnum; i++) {
			std::cin>>ga->Vexs[i];
		}
		fflush(stdin);
		for (int i = 0; i < ga->vexnum; i++) {
			for (int j = 0; j < ga->vexnum; j++) {
				ga->arcs[i][j].adj = -1;//默认为-1,对角线默认为0
				if (i == j)ga->arcs[i][j].adj = 0;		
			}	
		}
		int x, y;
		std::cout << "请依次输入一条边的顶点和权值,中间用空格间隔" << std::endl;
		for (int i = 0; i < ga->arcnum; i++) {
			std::cin >> v1 >> v2 >> e;
			x = ga->LocateVer(ga, v1);
			y = ga->LocateVer(ga, v2);
			if (x != -1 && y != -1) {
				ga->arcs[x][y].adj = e;
				ga->arcs[y][x].adj = e; //对于有向图可以删除此语句
			}
			else {
				std::cout << "输入出现错误" << std::endl;
				exit(-1);
			}
		}
}
int main() {
   //test
	GraphPointer test;
	test->CreateGraph(test);
	return 0;

}

你可能感兴趣的:(数组实现邻接矩阵)