我想通过以下方式将边缘添加到增强图中
boost::add_edge(100,101,g);
boost::add_edge(101,111,g);
,使图仅存储顶点101,101,111。如果我尝试使用此辅助功能显示图形内容
void Display() {
Viter vIt, vEnd;
Aiter nIt, nEnd;
boost::tie(vIt, vEnd) = vertices(G);
for (; vIt != vEnd; ++vIt)
{
std::cout << *vIt << " is connected with ";
boost::tie(nIt, nEnd) = boost::adjacent_vertices(*vIt, G);
for (; nIt != nEnd; ++nIt) {
std::cout << *nIt << " ";
}
std::cout << "\n";
}
}
然后我得到输出
0 is connected with
1 is connected with
...
100 is connected with 101
表示图正在自动形成其他顶点。有什么方法可以做到这一点而又不增加时间/空间的复杂性吗?即我可以引入一种映射,该映射会将0到0的整数映射到我要使用的整数。
我的问题是,有没有办法停止助推?还是如果我不理会空间复杂性真的有害吗?
邻接表的理论空间复杂度意味着,由于空间复杂度为$ O(V + E)$,因此这是有害的。
我的图形定义为
typedef boost::adjacency_list<boost::setS, boost::vecS, boost::undirectedS> Graph;
如果我将第二个模板更改为boost :: setS,则会被告知没有匹配的调用
boost::add_edge(n,m,g)