3

プロジェクトで Boost Graph Library を使用しており、次のように宣言されています。

typedef adjacency_list <listS, listS, undirectedS, TrackInformation, LinkInformation> TracksConnectionGraph;

グラフで connected_components を呼び出さなければならないまでは、うまくいっています。

typedef std::map<TracksConnectionGraph::vertex_descriptor, TracksConnectionGraph::vertices_size_type> component_type;
component_type component;
boost::associative_property_map< component_type > component_map(component);

int num_components = connected_components(tracks_connection_graph_, component_map);

VertexList=listS の場合、頂点のプロパティとして vertex_index がないことが問題のようです。これにより、connected_components で次のようなエラーが発生します。

/usr/local/include/boost-1_39/boost/property_map.hpp: メンバー関数内 'R boost::iterator_property_map::operator[](typename boost::property_traits::key_type) const [with RandomAccessIterator = __gnu_cxx::__normal_iterator 、IndexMap = boost::adj_list_vertex_property_map、boost::detail::error_property_not_found、const boost::detail::error_property_not_found&、boost::vertex_index_t>、T = boost::default_color_type、R = boost::default_color_type&]':

問題は、頂点のプロパティとして vertex_index を追加するにはどうすればよいかということです。

追加すると、add_vertex、remove_vertex などを呼び出すたびに、頂点ごとにこの情報を更新する必要があるということですか?

4

1 に答える 1

2

グラフ タイプの定義にプロパティを追加できvertex_indexます (頂点プロパティ テンプレート引数をadjacency_listに変更TrackInformationし、 に変更しproperty<vertex_index_t, size_t, TrackInformation>ます)。アルゴリズムを呼び出す前に、次のようなループを使用してプロパティ マップを埋める必要があります。

size_t index = 0;
BGL_FORALL_VERTICES(v, tracks_connection_graph_, TracksConnectionGraph) {
  put(vertex_index, g, v, index++);
}
于 2012-02-09T05:33:39.253 に答える