我正在尝试实现一些与图形有关的问题。为了表示该图,我使用了123
这样的邻接列表,
std::list
其中list<int> *adj;
adj = new list<int>[V];
是顶点总数。
然后我将所有边(有向)取整并使用函数
进行存储V
所以图看起来像这样:
一切正常,但是我想添加一个新顶点。我试图调整我的void addEdge(int u, int v) { // when u points to v
adj[u].push_back(v);
}
列表,但是我不能这样做。我做的是,将其复制,然后删除adj
并制作一个更大的新adj
,最后将所有先前的邻接表复制回去。
这是我的代码:
adj
它可以正常工作,但是我只是想知道是否有任何聪明的方法可以做到这一点,因为每次我想添加一个顶点时,它都需要大量的操作。
我尝试了很多事情,但是在这里没有找到类似的问题/答案。
答案 0 :(得分:1)
请勿在任何地方使用new
(有 sole 例外:名为something_ptr
的类的构造函数)。
您可能想要的是类似的东西
class Vertex
{
std::vector<std::vector<int>> adjacency;
void addEdge(int u, int v)
{
adjacency[u].push_back(v);
// If it's an undirected graph, also ?
// adjacency[v].push_back(u);
}
void addVertex()
{
adjacency.emplace_back();
// do something with adjacency.back()
}
};