邻接矩阵
// 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;
}
}