This iterator provides an Euler tour (Eulerian circuit) of a directed graph (if there exists) and it converts to the Arc
type of the digraph.
For example, if the given digraph has an Euler tour (i.e it has only one non-trivial component and the in-degree is equal to the out-degree for all nodes), then the following code will put the arcs of g
to the vector et
according to an Euler tour of g
.
std::vector<ListDigraph::Arc> et; for(DiEulerIt<ListDigraph> e(g); e!=INVALID; ++e) et.push_back(e);
If g
has no Euler tour, then the resulted walk will not be closed or not contain all arcs.
#include <lemon/euler.h>
Public Member Functions | |
DiEulerIt (const GR &gr, typename GR::Node start=INVALID) | |
Constructor. | |
operator Arc () | |
Arc conversion. | |
bool | operator== (Invalid) |
Compare with INVALID . | |
bool | operator!= (Invalid) |
Compare with INVALID . | |
DiEulerIt & | operator++ () |
Next arc of the tour. | |
Arc | operator++ (int) |
Postfix incrementation. |
Constructor.
gr | A digraph. |
start | The starting point of the tour. If it is not given, the tour will start from the first node that has an outgoing arc. |
DiEulerIt& operator++ | ( | ) | [inline] |
Next arc of the tour
Arc operator++ | ( | int | ) | [inline] |
Postfix incrementation.
Arc
, not a DiEulerIt, as one may expect.