提升子图和捆绑属性

时间:2011-09-30 08:49:48

标签: c++ boost boost-graph

我正在使用捆绑属性和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);

但这对Subgraph不起作用。

希望有人知道解决方案。

由于

2 个答案:

答案 0 :(得分:1)

邻接列表没有edge_index:es。您需要自己分配索引,但这就像向size_t index添加Edge一样简单,并在创建边时指定索引。

您可能不需要为子图创建边,因为boost子图是诱导子图。因此,图中两个端点都在子图中的所有边都将包含在子图中。

答案 1 :(得分:0)

我尝试使用add_vertex()函数添加顶点时遇到了类似的问题,并发现boost bugtracker上存在(非常旧的)未解决的问题:

Ticket #380: Support for bundled properties in graph adaptors

  

图形适配器(例如子图)不支持捆绑   属性,但他们应该。

进一步搜索导致以下2个补丁,这些补丁尚未合并但似乎最终为子图中的捆绑属性提供支持:

所以我猜答案是:现在,不要使用捆绑属性。但在将来,这个问题应该会消失。