Domanda

Sto provando a definire un grafico con bordi non orientati da un insieme di accoppiamento (int, int) bordi (dove ogni int rappresenta un indice di vertice). Ogni tale bordo ha un indice propria.

Il problema è che io voglio che l'indice vertice interno del grafico sarà coerente con gli indici dei vertici originali. Mi piace anche essere in grado di estrarre l'indice bordo originale da un descrittore di bordo.

http://www.boost.org /doc/libs/1_47_0/libs/graph/doc/using_property_maps.html ( Proprietà esterni ) ho capito che avrei dovuto utilizzare il seguente tipo di grafico:

typedef adjacency_list<vecS, vecS, udirectedS, 
no_property, property<edge_index_t, std::size_t> > Graph;

Purtroppo non c'è alcuna spiegazione su come utilizzare la proprietà edge_index_t.

E 'chiaro che ho potuto solo usare una mappa (coppia (int, int), int), ma sto cercando una soluzione più elegante orientata spinta.

Grazie, Kiril

È stato utile?

Soluzione

Poiché utilizzi vettori per definire raccolta di vertici c'è uno a uno corrispondenza tra indici dei vertici e descrittori di vertice. Hai solo bisogno di definirti oggetto grafico come segue:

Graph g(N);

Dove N è il numero di vertici. Questo alloca N vertici, ogni descrittore vertice è un numero da 0 a N-1.

Per ottenere EDGE Index dal descrittore di bordo è possibile utilizzare la funzione get: get(edge_index, g, edge_descriptor);. Il descrittore di bordo si può ottenere da iteratori restituiti dalla funzione adjacent_vertices(v, g).

La speranza è ciò che avete significato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top