基于链表的Graph,Can顶点有多边?

时间:2015-03-10 23:40:35

标签: c++ data-structures

我正在考虑实现基于链表的图表的方法。但是,据我所知,链表只能访问下一个列表(或者前面也是双倍的),并且图中的顶点可以访问任何其他顶点,除非它没有到某个顶点的边。这两个不同的功能打破了构建图形的想法。

如果我的顶点(或节点)类(或结构)具有指向另一个顶点的指针,

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()函数是

  1. 图中必须存在两个顶点
  2. 两个顶点不应该连接
  3. 以下函数是我现在正在使用的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只有它指向某个顶点的链接,如果我将顶点的下一个指针更改为数组指向多个顶点,它会破坏链表的规则。

1 个答案:

答案 0 :(得分:0)

通常这是通过拥有当前节点所连接的所有节点的链表来完成的。如果这太令人困惑,请从指向当前节点所连接的所有节点的向量或指针数组开始,然后使用链表实现该向量/数组。