Я хотел бы добавить ребра в график повышения следующим образом
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, до целых чисел, которые я хотел бы использовать.
Мой вопрос: есть ли способ остановить повышение, делая это?Или это действительно так вредно с точки зрения сложности пространства, если я просто игнорирую это?
Теоретическая сложность пространства списка смежности подразумевает, что он будет вреден, поскольку сложность пространства равна $ O (V +).E) $.
Мой график определен как
typedef boost::adjacency_list<boost::setS, boost::vecS, boost::undirectedS> Graph;
Если я изменю второй шаблон на boost :: setS, то мне сообщают, что нет соответствующего вызова для
boost::add_edge(n,m,g)