如何在c ++中找到图形的邻接列表的大小?

时间:2015-07-20 04:43:45

标签: c++ graph adjacency-list

我正在尝试构建一个动态图,其中添加新节点时,邻接列表的大小增加1,并且每次计算图的大小时。

Graph.h
 class Graph
 {
    long long no_of_nodes;    // No. of vertices
    list<long long> *adj_list_of_nodes;    // Pointer to an array containing adjacency lists

    public:
    void sizeOfGraph ();
    void addEdge(long long, long long); // function to add an edge to graph
    bool isReachable(long long, long long );  // returns true if there is a path from s to d
 };



Graph.cpp
void Graph::sizeOfGraph()
{
    adj_list_of_nodes = new list<long long>[1];

   //I want to find out the no_of_nodes in the adjacency list somewhat like this but this is not working
    this->no_of_nodes = adj_list_of_nodes.size();   
}

但是由于邻接列表是指针类型列表,我无法找到合适的函数来执行此操作。任何人都可以建议如何在图表中找到节点的数量或使用邻接列表

1 个答案:

答案 0 :(得分:0)

如果是指针,只需使用->运算符调用该方法。

adj_list_of_nodes->size();

请注意,仅使用new分配空间不会神奇地填充list。您需要将数据插入列表中。 new初始化部分应该放在类的构造函数中,而delete部分放在析构函数中。理想情况下,您应该在C ++中使用智能指针类而不是原始指针。

因此,  1.在构造函数中初始化指针。  2.将数据填入列表。  3.返回尺寸。 (如果插入了数据,则大小将为非零)

注意:我不明白这里需要列表&lt;&gt; *。您可以只使用一个对象而不是一个指向list<long long> adj_list的指针。

修改 邻接列表的形式为:[{vertex}:[相邻顶点列表..] ..]

因此创建一个map:使用key作为顶点名称(在本例中为long long),将value作为邻接列表。

class Graph
{
    std::map<long long, std::list<long long>> adj_list ;

public:
    Graph() = default ;
    void insert(long long, const std::list<long long>&);
    std::size_t size() const ;
};

void Graph::insert(long long v, const std::list<long long>& lt) {
    if(adj_list[v].size() == 0u)
        adj_list[v] = lt ;
    else
        adj_list[v].insert(adj_list[v].begin(), lt.begin(), lt.end());
}

std::size_t Graph::size() const {
    return adj_list.size();
}

int main() {
    Graph ob ;
    ob.insert(1, { 2, 3 }); // vertex 2 and 3 are adjacent to vertex 1
    std::cout << ob.size() ;
}

Here是一个通用示例。 (您的顶点可以是任何类型的数据,即long longcharstd::string