2011-09-30 15 views
5

Utilizzo le proprietà in bundle e adjacency_list e desidero utilizzare la classe del sottografo.Boost Subgraph and Bundled properties

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; 

La property<edge_index_t,int,Edge> parte è necessario, come sottografo deve edge_index_t per confrontare due bordi.

Ora la mia domanda è: come aggiungo un Edge utilizzando le proprietà raggruppate in un sottografo? Nel grafico normale senza property<edge_index_t,int,Edge> aggiungo un vantaggio come segue:

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

Ma questo non funziona per sottografo.

Spero che qualcuno conosca una soluzione per questo.

Grazie

Ben

risposta

1

Una lista di adiacenza non hanno edge_index: es. È necessario assegnare un indice manualmente, ma è semplice come aggiungere uno size_t index allo Edge e assegnare un indice mentre si creano i bordi.

Probabilmente non è necessario creare bordi per il sottografo, poiché i sottografi di incremento sono sottografi indotti. Pertanto, tutti i bordi nel grafico di cui entrambi gli endpoint si trovano nel sottografo verranno inclusi nei sottografi.

+1

Se aggiungo indice size_t alla mia struttura Edge, non troverà questo indice, in quanto è necessario in 'propertey ' – Ben

0

Ho appena incontrato l'un problema simile quando si cerca di aggiungere un vertice con la funzione add_vertex() e ha scoperto che v'è una (molto vecchio) questione irrisolta sul bugtracker spinta:

Ticket #380: Support for bundled properties in graph adaptors:

Gli adattatori grafici (come il sottografo) non supportano le proprietà in bundle, ma dovrebbero.


ulteriori ricerche portano alle seguenti 2 patch, che non sono ancora uniti, ma sembra portare finalmente il supporto per le proprietà in bundle in sottografi:

Quindi immagino che la risposta sia: Per ora, non usare le proprietà in bundle. Ma in futuro, il problema dovrebbe scomparire.