我正在尝试构建一个动态图,其中添加新节点时,邻接列表的大小增加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();
}
但是由于邻接列表是指针类型列表,我无法找到合适的函数来执行此操作。任何人都可以建议如何在图表中找到节点的数量或使用邻接列表
答案 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 long
,char
,std::string
)