Re: [Boost-bugs] [Boost C++ Libraries] #373: LEDA graph adaptors for undirected graphs

Subject: Re: [Boost-bugs] [Boost C++ Libraries] #373: LEDA graph adaptors for undirected graphs
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2008-04-29 18:31:59


#373: LEDA graph adaptors for undirected graphs
-------------------------------+--------------------------------------------
  Reporter: dgregor | Owner: dgregor
      Type: Feature Requests | Status: new
 Milestone: | Component: graph
   Version: None | Severity: Optimization
Resolution: None | Keywords:
-------------------------------+--------------------------------------------
Changes (by dgregor):

  * owner: doug_gregor => dgregor

Old description:

> {{{
> The LEDA graph adaptors in the BGL seem to work properly for
> directed graphs (the LEDA type GRAPH<...>), but there are no
> corresponding adaptors for the undirected LEDA graph type
> (UGRAPH<...>).
>
> Undirected LEDA graphs follow a very different model than the
> undirected graphs in the BGL, which will require some special
> machinery. The LEDA type UGRAPH<...> is actually just a class
> derived from GRAPH<...> that applies the "make_undirected()"
> member function upon initialization. make_undirected() moves all of
> the in-edges of each vertex to the out-edges list. This has several
> unfortunate consequences:
> 1) The in-degree of an undirected LEDA graph is always zero, even
> when the out-degree is greater than zero. The in_edges list is
> therefore empty.
> 2) When traversing the list of out-edges for a vertex u, the edges
> returned may have u as their target but not their source. This breaks
> an important invariant in the BGL, which mandates that source(e,
> g)==u if e came from out_edges(u, g). Similarly for in-edges.
>
> Thus, an undirected LEDA graph adaptor will need to introduce
> special adaptors for the out_edge_iterator and in_edge_iterator
> types, which return a new edge_descriptor type for LEDA that can
> swap the source and target of a LEDA edge as needed. Additionally,
> graph-mutating operations (such as add_edge) may need to ensure
> that the graph remains undirected, as if make_undirected() had been
> called.
> }}}

New description:

 {{{
 The LEDA graph adaptors in the BGL seem to work properly for
 directed graphs (the LEDA type GRAPH<...>), but there are no
 corresponding adaptors for the undirected LEDA graph type
 (UGRAPH<...>).

 Undirected LEDA graphs follow a very different model than the
 undirected graphs in the BGL, which will require some special
 machinery. The LEDA type UGRAPH<...> is actually just a class
 derived from GRAPH<...> that applies the "make_undirected()"
 member function upon initialization. make_undirected() moves all of
 the in-edges of each vertex to the out-edges list. This has several
 unfortunate consequences:
   1) The in-degree of an undirected LEDA graph is always zero, even
 when the out-degree is greater than zero. The in_edges list is
 therefore empty.
   2) When traversing the list of out-edges for a vertex u, the edges
 returned may have u as their target but not their source. This breaks
 an important invariant in the BGL, which mandates that source(e,
 g)==u if e came from out_edges(u, g). Similarly for in-edges.

 Thus, an undirected LEDA graph adaptor will need to introduce
 special adaptors for the out_edge_iterator and in_edge_iterator
 types, which return a new edge_descriptor type for LEDA that can
 swap the source and target of a LEDA edge as needed. Additionally,
 graph-mutating operations (such as add_edge) may need to ensure
 that the graph remains undirected, as if make_undirected() had been
 called.
 }}}

--
Ticket URL: <http://svn.boost.org/trac/boost/ticket/373#comment:2>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.


This archive was generated by hypermail 2.1.7 : 2017-02-16 18:49:57 UTC