C++ 图结构数据结构实现详解:节点与边关联方法
因为'adjvex'是一个指向'side'结构体的指针数组,而不是一个'node'结构体的成员,所以不能直接在'node'结构体中定义'adjvex'成员。可以使用下面的方法将'adjvex'与'node'结构体关联起来:
- 在'node'结构体中定义一个指向'side'结构体的指针,例如:
struct node
{
int num;
int color;
side* edge; // 指向相邻边的指针
};
- 在'side'结构体中定义一个指向'node'结构体的指针,例如:
struct side
{
int border;
node* vertex; // 指向相邻顶点的指针
};
- 在创建'node'和'side'时,将它们的指针互相关联起来,例如:
node* v[7];
side* e[21]; // 一共有21条边
for (int i = 0; i < 7; i++)
{
v[i] = new node();
v[i]->num = i + 1;
}
for (int i = 0; i < 21; i++)
{
e[i] = new side();
}
// 将边与顶点关联起来
e[0]->vertex = v[0]; // 第一条边与v[0]相邻
v[0]->edge = e[0]; // v[0]的相邻边为第一条边
e[1]->vertex = v[0];
v[0]->edge = e[1];
e[2]->vertex = v[1];
v[1]->edge = e[2];
// ...
- 在访问相邻顶点和相邻边时,通过指针进行访问,例如:
v[0]->edge->vertex; // 访问v[0]的第一条边的相邻顶点
v[1]->edge->border; // 访问v[1]的第一条边的border值
原文地址: https://www.cveoy.top/t/topic/ohwt 著作权归作者所有。请勿转载和采集!