Нумерация вершин не начинается с 0 в boost :: graph - PullRequest
1 голос
/ 28 марта 2019

Я хотел бы добавить ребра в график повышения следующим образом

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...