Повысьте подграф и связанные свойства - PullRequest
5 голосов
/ 30 сентября 2011

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

struct Vertex
{
   int index;
   int seed;
}; 

struct Edge
{
 bool visted;
 double weight;
};

typedef adjacency_list<listS, listS, undirectedS, Vertex, property<edge_index_t,int,Edge> > Graph;
typedef subgraph<Graph> testSubgraph;

Необходима часть property<edge_index_t,int,Edge>, поскольку для подграфа требуется edge_index_t для сравнения двух ребер.

Теперь мой вопрос: как мне добавить Edge, используя связанные свойства в подграфе? В нормальном графе без property<edge_index_t,int,Edge> я добавляю ребро следующим образом:

Edge e;
vertex_descriptor u,v; 
// fill in u and v;
e.weight = 1.0;
e.visted=false;
add_edge(u,v,e,graph);

Но это не работает для подграфа.

Надеюсь, кто-то знает решение для этого.

Спасибо

Ben

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Список смежности не имеет edge_index: es. Вам нужно назначить индекс самостоятельно, но это так же просто, как добавить size_t index к Edge и назначить индекс при создании ребер.

Возможно, вам не нужно создавать ребра для подграфа, так как подграфы повышения являются индуцированными подграфами. Поэтому все ребра в графе, в котором обе конечные точки находятся в подграфе, будут включены в ваши подграфы.

0 голосов
/ 03 ноября 2015

Я только что столкнулся с подобной проблемой при попытке добавить вершину с помощью функции add_vertex() и обнаружил, что есть (очень старая) нерешенная проблема в багтрекере буста:

Билет № 380: поддержка связанных свойств в графических адаптерах :

Графические адаптеры (например, подграф) не поддерживают в комплекте свойства, но они должны.


Дальнейший поиск привел к появлению следующих 2 патчей, которые еще не объединены, но, по-видимому, наконец принесли поддержку связанных свойств в подграфах:

Поэтому я думаю, что ответ таков: пока не используйте связанные свойства. Но в будущем проблема должна исчезнуть.

...