我正在考虑实现基于链表的图表的方法。但是,据我所知,链表只能访问下一个列表(或者前面也是双倍的),并且图中的顶点可以访问任何其他顶点,除非它没有到某个顶点的边。这两个不同的功能打破了构建图形的想法。
如果我的顶点(或节点)类(或结构)具有指向另一个顶点的指针,
class Vertex
{
Vertex *link; //edge to another veretex
int item; //item in vertex
}
我的图表类看起来像
class GraphClass
{
Vertex **Graph; //Graph itself
int VertexQuantity; // number of vertex in graph
}
我可以使用函数addVertex()将顶点添加到图形中,但是当尝试连接两个顶点时,开始失去理智。我考虑构建addEdge()函数是
以下函数是我现在正在使用的addEdge()函数。
void addEdge(Graph *g, Vertex *source, Vertex *destination)
{
unsigned index, sourceIndex;
Vertex *temp;
// if source or destination is not exist in graph
if((sourceIndex = searchVertex(g, source) < 0 || searchVertex(g, destination) < 0))
return;
// if source and destination are already connected
if(checkConnection(g, sourceIndex, source, destination) < 0 || sourceIndex < 0)
return;
temp = g->Graph[sourceIndex];
temp->link = destination;
}
这是我的问题。比方说,v1是顶点并连接到v2。如果我想在v1和v3之间建立连接,我该怎么办? v1只有它指向某个顶点的链接,如果我将顶点的下一个指针更改为数组指向多个顶点,它会破坏链表的规则。
答案 0 :(得分:0)
通常这是通过拥有当前节点所连接的所有节点的链表来完成的。如果这太令人困惑,请从指向当前节点所连接的所有节点的向量或指针数组开始,然后使用链表实现该向量/数组。