双向图概念细化了 IncidenceGraph,并增加了对每个顶点的入边进行高效访问的要求。此概念与 IncidenceGraph 分离,是因为对于有向图,对入边的高效访问通常需要更多的存储空间,并且许多算法不需要访问入边。对于无向图,这不是问题,因为in_edges()和out_edges()函数是相同的,它们都返回与顶点关联的边。
G | 作为图模型的类型。 |
g | 类型为G. |
v | 类型为boost::graph_traits<G>::vertex_descriptor. |
boost::graph_traits<G>::traversal_category 此标签类型必须可转换为bidirectional_graph_tag. |
boost::graph_traits<G>::in_edge_iterator顶点 v 的入边迭代器提供对 v 的入边的访问。因此,入边迭代器的值类型是其图的边描述符类型。入边迭代器必须满足 MultiPassInputIterator 的要求。 |
in_edges(v, g) | 返回一个迭代器范围,提供对顶点入边(对于有向图)或关联边(对于无向图)的访问v在图 g 中g。对于有向图和无向图,出边的目标都必须是顶点v,源必须是与 之相邻的顶点v.
返回类型std::pair<in_edge_iterator, in_edge_iterator> |
in_degree(v, g) | 返回顶点入边的数量(对于有向图)或关联边的数量(对于无向图)v在图 g 中g. 返回类型degree_size_type |
degree(v, g) | 返回顶点入边加出边的数量(对于有向图)或关联边的数量(对于无向图)v在图 g 中g. 返回类型degree_size_type |
template <class G> struct BidirectionalGraphConcept { typedef typename boost::graph_traits<G>::in_edge_iterator in_edge_iterator; void constraints() { BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<G> )); BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept<in_edge_iterator> )); p = in_edges(v, g); n = in_degree(v, g); n = degree(v, g); e = *p.first; const_constraints(g); } void const_constraints(const G& g) { p = in_edges(v, g); n = in_degree(v, g); n = degree(v, g); e = *p.first; } std::pair<in_edge_iterator, in_edge_iterator> p; typename boost::graph_traits<G>::vertex_descriptor v; typename boost::graph_traits<G>::edge_descriptor e; typename boost::graph_traits<G>::degree_size_type n; G g; };
版权所有 © 2000-2001 | Jeremy Siek, 印第安纳大学 (jsiek@osl.iu.edu) |