Вопрос

Я пытаюсь определить график с неориентированными краями из набора пар (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) функция

Надеюсь, это то, что вы имели в виду.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top