![](/img/trans.png)
[英]How to find all paths for a directed graph implemented in c++ as adjacency list?
[英]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 long
, char
, std::string
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.