Boost.Graph中的boost :: out_edges(v,g)有什么作用?

时间:2014-11-11 20:30:28

标签: boost boost-graph edges

我无法理解这个功能的文档,我已经多次看到以下

tie (ei,ei_end) = out_edges(*(vi+a),g);

**g**<-graph
**vi**<-beginning vertex of graph
**a**<- a node
**ei and ei_end** <- edge iterators

该函数返回什么,它做了什么,我什么时候可以使用?

我可以找到节点的所有边缘吗?

2 个答案:

答案 0 :(得分:6)

提供迭代器,以迭代图u中节点g外出边缘,例如:

  typename graph_traits < Graph >::out_edge_iterator ei, ei_end;
  for (boost::tie(ei, ei_end) = out_edges(u, g); ei != ei_end; ++ei) {
    auto source = boost::source ( *ei, g );
    auto target = boost::target ( *ei, g );
    std::cout << "There is an edge from " << source <<  " to " << target << std::endl;
  }

其中Graph是图表的类型定义,g是其中的一个实例。但是,out_edges仅适用于具有有向边的图。与out_edges相反的是in_edges,它为您提供了计算节点进入边缘的迭代器。

在无向图中,out_edgesin_edges都将返回连接到相关节点的所有边。

但是,可以在http://www.boost.org/doc/libs/1_55_0/libs/graph/doc/graph_concepts.html Boost.Graph 示例/测试中轻松找到更多信息。

答案 1 :(得分:0)

如上所述,对于directed图,out_edges接受“ vertex_descriptor和要检查的图(邻接列表)”并返回“发出给定(指向)给定值的所有边vertex_descriptor”,通过迭代器范围。

https://www.boost.org/doc/libs/1_69_0/libs/graph/doc/adjacency_list.html

中所述
std::pair<out_edge_iterator, out_edge_iterator>
out_edges(vertex_descriptor u, const adjacency_list& g)
  

返回一个迭代器范围,该范围提供对顶点边缘的访问   图g中的u。如果图形是无向的,则此迭代器范围提供   访问入射在顶点u上的所有边。对于定向和   无向图,对于边缘e,source(e,g)== u和target(e,   g)== v,其中v是与u相邻的顶点。

简而言之,要回答您的一些问题,

  1. 是的,您可以使用它来找到节点的所有边缘。
  2. 对于无向图,其行为如上面的链接所述,它返回入射在顶点上的所有边(所有与之相连的边)