2012-02-13 16 views
5

¿Cómo puedo copiar un gráfico de tipo adjacency_list a otro gráfico de tipo adjacency_list?copia un gráfico (adyacencia_lista) a otro

typedef adjacency_list<setS, setS, undirectedS, NodeDataStruct, EdgeDataStruct> MyGraph; 
MyGraph g1, g2; 

// processing g1: adding vertices and edges ... 
// processing g2: adding some vertices and edges ... 

g1.clear(); 
g1 = g2 // this gives an execution error (exception) 
g1 = MyGraph(g2); // this also gives an execution error 
g2.clear(); 

Respuesta

6

¿Has probado copy_graph?


difícil saber cuál es el problema sin ver los errores, pero si tuviera que adivinar, diría primero asegurarse de que está proporcionando un mapa vertex_index a copy_graph ya que no es disponible por defecto cuando se utiliza setS para el almacenamiento de vértices. De acuerdo con su earlier question, parece que ya lo ha descifrado, así que solo tenemos que juntarlo todo.

typedef adjacency_list<setS, setS, undirectedS, NodeDataStruct, EdgeDataStruct> MyGraph; 
    typedef MyGraph::vertex_descriptor NodeID; 

    typedef map<NodeID, size_t> IndexMap; 
    IndexMap mapIndex; 
    associative_property_map<IndexMap> propmapIndex(mapIndex); 

    MyGraph g1, g2; 

    // processing g1: adding vertices and edges ... 
    // processing g2: adding some vertices and edges ... 

    int i=0; 
    BGL_FORALL_VERTICES(v, g2, MyGraph) 
    { 
    put(propmapIndex, v, i++); 
    } 

    g1.clear(); 
    copy_graph(g2, g1, vertex_index_map(propmapIndex)); 
    g2.clear(); 
+0

Para copy_graph se dice que el tipo de gráfico debe ser un modelo de VertexListGraph. En mi caso, he dicho que es una adyacencia_list. – shn

+1

@ user995434 Pero adjacency_list es un modelo de VertexAndEdgeListGraph que es un refinamiento de VertexListGraph. Por lo tanto, adjacency_list es un modelo de VertexListGraph. –

+0

¿Podría darme un pequeño ejemplo ilustrativo de cómo usar copy_graph() para lo que me gustaría hacer? Siempre me da errores de compilación. Gracias por adelantado. – shn

Cuestiones relacionadas