2011-07-24 3 views
0

j'essaie de définir un diagramme avec des bords non orientés à partir d'un ensemble de paires de bords (int, int) (où chaque int représente un indice de sommet). Chacun de ces bords a son propre indice.bords Graphique avec des index

Le hic est que je veux que l'indice de sommet interne du graphique sera compatible avec les indices des sommets d'origine. J'aime aussi pouvoir extraire l'index de bord original d'un descripteur de bord.

De http://www.boost.org/doc/libs/1_47_0/libs/graph/doc/using_property_maps.html (Propriétés extérieures section) Je comprends que je devrais utiliser le type de graphique suivant:

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

Malheureusement, il n'y a pas d'explication sur la façon d'utiliser les biens de edge_index_t.

Il est clair que je pouvais utiliser une carte (paire (int, int), int) mais je suis à la recherche d'une solution orientée poussée plus élégante.

Merci, Kiril

Répondre

4

Puisque vous utilisez des vecteurs pour définir ensemble de sommets il y a une correspondance biunivoque entre les indices des sommets et les descripteurs de sommet. Vous avez juste besoin de définir votre objet graphique comme suit:

Graph g(N); 

Où N est le nombre de sommets. Cela alloue N sommets, chaque descripteur de sommet est un nombre de 0 à N-1.

Pour obtenir l'index de bord à partir du descripteur de bord, vous pouvez utiliser la fonction get: get(edge_index, g, edge_descriptor);. Le descripteur de bord, vous pouvez obtenir de itérateurs renvoyés par adjacent_vertices(v, g) fonction.

espère que ce que vous avez voulu dire.

+0

Oui, ça aide, je vous remercie! – kirilsolo

Questions connexes