Увеличьте графики графика с индексами
-
25-10-2019 - |
Вопрос
Я пытаюсь определить график с неориентированными краями из набора пар (int, int) (где каждый int представляет индекс вершины). Каждый такой край имеет свой собственный индекс.
Уловка в том, что я хочу, чтобы внутренний индекс вершины графика соответствовал исходным индексам вершин. Мне также нравится иметь возможность извлекать исходный индекс края из дескриптора края.
Из http://www.boost.org/doc/libs/1_47_0/libs/graph/doc/using_property_maps.html (Внешние свойства раздел) Я понимаю, что должен использовать следующий тип графика:
typedef adjacency_list<vecS, vecS, udirectedS,
no_property, property<edge_index_t, std::size_t> > Graph;
К сожалению, нет никакого объяснения, как использовать свойство Edge_Index_T.
Понятно, что я мог бы просто использовать карту (пара (int, int), int), но я ищу более элегантное решение, ориентированное на повышение.
Спасибо, Кирил
Решение
Поскольку вы используете векторы для определения сбора вершин, между индексами вершины и дескрипторами вершины существует одна соответствие. Вам просто нужно определить свой объект графика следующим образом:
Graph g(N);
Где n - количество вершин. Это выделяет n вершин, каждый дескриптор вершины-это число от 0 до N-1.
Чтобы получить индекс Edge из дескриптора края, вы можете использовать функцию GET:get(edge_index, g, edge_descriptor);
. Анкет Дескриптор края, который вы можете получить от итераторов, возвращенных adjacent_vertices(v, g)
функция
Надеюсь, это то, что вы имели в виду.