簡體   English   中英

如何在C ++中找到圖的鄰接表的大小?

[英]How to find the size of the adjacency list of the graph in c++?

我正在嘗試構建一個動態圖,其中在添加新節點時,鄰接列表的大小將增加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();   
}

但是由於鄰接列表是指針類型列表,所以我無法找到合適的函數來這樣做。 任何人都可以建議如何找到圖中的節點數或使用鄰接表

對於指針,只需使用->運算符調用該方法。

adj_list_of_nodes->size();

注意,僅用new分配空間不會神奇地填充list 您需要將數據插入列表。 new初始化部分應該放在您的類的構造函數中,而delete部分應該放在析構函數中。 理想情況下,您應該使用智能指針類,而不是C ++中的原始指針。

因此,1.在構造函數中初始化指針。 2.將數據填充到列表中。 3.返回大小。 (如果插入了數據,則大小將為非零)

注意:我不明白這里是否需要list <> *。 您可以只使用一個對象,而不是指向一個指針,即list<long long> adj_list

編輯鄰接列表的形式為:[{vertex}:[相鄰頂點的列表..] ..]

因此,創建一個map:鍵為頂點名稱(在這種情況下為long long ),值作為鄰接表。

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() ;
}

是一個通用示例。 (您的頂點可以是任何類型的數據,即long longcharstd::string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM