【问题标题】:What does boost::out_edges( v, g ) in Boost.Graph do?Boost.Graph 中的 boost::out_edges( v, g ) 有什么作用?
【发布时间】:2015-01-08 12:54:05
【问题描述】:

我无法理解这个函数的文档,我已经看过好几次了

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

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

例如,我可以从一个节点中找到所有边吗?

【问题讨论】:

  • (vi+a) 只是选择某个节点。
  • 为什么不直接写 a 而不是 vi+a?

标签: boost boost-graph edges


【解决方案1】:

提供迭代器以从图 g 中迭代节点 uout-going 边,例如:

  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.htmlBoost.Graph 示例/测试中轻松找到。

【讨论】:

  • 嘎。你能对“边缘”稍微模糊一点吗?即使在您应该从某个地方复制的样本中,您也无法定义 u 来自哪里,或者它可能是什么。除此之外,我想不出任何 OP 无法立即理解的内容(可选地提及不同的图形表示)
  • u 是您要从中找到边迭代 ei 的顶点,并且 ei_end,ei 将迭代直到 ei_end,因此将所有迭代器提供给来自顶点 'u' 的所有边。这是一个从顶点访问所有边的方法,对吗?
  • 是的@LoveMeow,这是正确的。也许您想要一个文档页面,在每个页面中添加(“是的,您已正确阅读”):) 不过值得注意的是,out_edges 不是所有边都连接到顶点,而是,这是传出的边缘。这与表示边缘的方式有关。您需要此处记录的 IncidenceGraph:boost.org/doc/libs/1_55_0/libs/graph/doc/graph_concepts.html
  • 感谢 cmets。我会解决你的问题。
  • 在 undirectS 图中会发生什么,我的一个朋友说它仍然有效。
【解决方案2】:

如上所述,对于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)

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

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

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

【讨论】:

    猜你喜欢
    • 2014-02-19
    • 2015-04-27
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    相关资源
    最近更新 更多