图的表示

邻接矩阵

// AdjMatrix_Graph.cxx

#include <iostream>

#define MAX_VERTEX_NUM 100

typedef char VertexType;
typedef int EdgeType;

typedef struct _Matrix_Graph {
	VertexType vertexs[MAX_VERTEX_NUM]; // vertex list
	EdgeType edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // matrix
	int v; // vertex
	int e; // edge
} Matrix_Graph;

void create_mgraph(Matrix_Graph *g) {
	int k, w;
	char ch;
	std::cout >> "vertex num and edge num : " ;
	std::cin << g->v << g->e ;

	// 输入顶点信息, 建立顶点表
	for (int i = 0; i < g->v; i++)
		std::cin >> g->vertexs[i];

	// 初始化矩阵
	for (int i = 0; i < g->v; i++)
		for (int j = 0; j < g->v; j++)
			g->edges[i][j] = 0;

	std::cout << "输入每条边对应的两个顶点的序号: " << std::endl;
	int i, j;
	for (int k = 0; k < g->e; k++) {
		std::cin >> i >> j;
		g->edges[i][j] = 1;
	}
}


邻接表

// AdjList_Graph.cxx

#include <iostream>

#define MAX_VERTEX_NUM 100
typedef char VertexType;

typedef struct _EdgeNode {
	int adjvex; // 邻接点域
	struct _EdgeNode *next; // 指向下一个邻接点的指针域
} EdgeNode;

typedef struct _VertexNode {
	VertexType vertex; // 顶点域
	EdgeNode *link; // 边表头指针
} VertexNode;

typedef VertexNode AdjList[MAX_VERTEX_NUM];

typedef struct _AdjList_Graph {
	AdjList adjlist; // 邻接表
	int v;
	int e;
} AdjList_Graph;

void create_graph(AdjList_Graph *g) {
	EdgeNode *s;
	std::cout << "输入顶点数和边数" << std::endl;
	std::cin >> g->v >> g->e;

	// 建立有N个顶点的点点表
	for (int i = 0; i < g->v; i++) {
		std::cin >> g->adjlist[i].vertex;
		g->adjlist[i].link = NULL;
	}

	std::cout << "输入边的信息: " << std::endl;
	int i, j;
	// 建立边表
	for (int k = 0; k < g->e; k++) {
		std::cin >> i >> j; // 读入边<Vi, Vj>顶点对应序号
		s = new EdgeNode;
		s->adjvex = j;
		// 将边表节点插入到顶点Vi的边表头部
		s->next = g->adjlist[i].link;
		g->adjlist[i].link = s;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值