2011-09-30 1 views
5

バンドルプロパティとadjacency_listを使用しています。サブグラフクラスを使用したいと思います。サブグラフは、2つのエッジを比較するedge_index_tを必要としてブーストサブグラフとバンドルプロパティ

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を追加する方法です。

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

しかし、これは部分グラフのために動作しません:property<edge_index_t,int,Edge>ない通常のグラフで は、私は次のようなエッジを追加します。

誰かがこれに対する解決策を知りたいと思っています。 ES:

おかげ

ベン

答えて

1

隣接リストはedge_indexを持っていません。あなた自身でインデックスを割り当てる必要がありますが、Edgesize_t indexを追加し、エッジを作成するときにインデックスを割り当てるのと同じくらい簡単です。

ブーストサブグラフは誘導サブグラフなので、サブグラフのエッジを作成する必要はないでしょう。したがって、両方のエンドポイントがサブグラフ内にあるグラフのすべてのエッジがサブグラフに含まれます。

+1

私はちょうど '適切な'に必要なので、私はこのインデックスを見つけることができません、私のエッジ構造体にsize_tのインデックスを追加する ' – Ben

0

私はちょうどadd_vertex()機能を持つ頂点を追加しようと、同様の問題に遭遇したとブーストバグトラッカーに(非常に古い)未解決の問題があることが判明:

Ticket #380: Support for bundled properties in graph adaptors

グラフ・アダプター(サブグラフなど)は、バンドルされた のプロパティーをサポートしていませんが、それは必要です。

:さらにまだマージされていないが、最終的には部分グラフでバンドルのプロパティのサポートを持って来るように見え、次の2つのパッチ、リードを検索


答えは次のとおりです。今のところ、バンドルされたプロパティを使用しないでください。しかし、将来、この問題は消えていくはずです。

関連する問題