使用 Boost adjacency_list 执行连接组件,其中 VertexList=listS

发布于 2024-09-08 03:44:58 字数 1283 浏览 5 评论 0原文

我在一个项目中使用 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[](类型名 boost::property_traits::key_type) const [与 RandomAccessIterator = __gnu_cxx::__normal_iterator , IndexMap = boost::adj_list_vertex_property_map, boost::detail::error_property_not_found, 常量 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 等时,我都必须更新每个顶点的此信息?

I use Boost Graph Library in a project and it is declared as:

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

Things are going fine until I have to call connected_components on my graph.

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);

The problem seems to be that if the VertexList=listS, I do not have vertex_index as a property of my vertex. This makes connected_components give me errors like theses:

/usr/local/include/boost-1_39/boost/property_map.hpp:
In member function '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&]':

So the question is: how do I add vertex_index as a property of my vertices?

If I add it, does it mean that whenever I call add_vertex, remove_vertex and such, I have to update this information for each vertex?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

放低过去 2024-09-15 03:44:58

您可以将 vertex_index 属性添加到图形类型的定义中(在 adjacency_list 的顶点属性模板参数中,将 TrackInformation 更改为 属性)。在调用算法之前,您需要使用循环填充属性映射,例如:

size_t index = 0;
BGL_FORALL_VERTICES(v, tracks_connection_graph_, TracksConnectionGraph) {
  put(vertex_index, g, v, index++);
}

You can add a vertex_index property to the definition of your graph type (in the vertex property template argument to adjacency_list, change TrackInformation to property<vertex_index_t, size_t, TrackInformation>). Before calling the algorithm, you will need to fill in the property map using a loop such as:

size_t index = 0;
BGL_FORALL_VERTICES(v, tracks_connection_graph_, TracksConnectionGraph) {
  put(vertex_index, g, v, index++);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文