[Lemon-commits] Peter Kovacs: Bug fix in the Euler iterators (#264)
Lemon HG
hg at lemon.cs.elte.hu
Sat Apr 18 09:55:40 CEST 2009
details: http://lemon.cs.elte.hu/hg/lemon/rev/493533ead9df
changeset: 623:493533ead9df
user: Peter Kovacs <kpeter [at] inf.elte.hu>
date: Wed Apr 15 11:41:25 2009 +0200
description:
Bug fix in the Euler iterators (#264) Handle the case when the first
node is isolated.
diffstat:
lemon/euler.h | 44 ++++++++++++++++++++++++++++----------------
1 files changed, 28 insertions(+), 16 deletions(-)
diffs (61 lines):
diff --git a/lemon/euler.h b/lemon/euler.h
--- a/lemon/euler.h
+++ b/lemon/euler.h
@@ -78,13 +78,19 @@
DiEulerIt(const GR &gr, typename GR::Node start = INVALID)
: g(gr), nedge(g)
{
- if(start==INVALID) start=NodeIt(g);
- for(NodeIt n(g);n!=INVALID;++n) nedge[n]=OutArcIt(g,n);
- while(nedge[start]!=INVALID) {
- euler.push_back(nedge[start]);
- Node next=g.target(nedge[start]);
- ++nedge[start];
- start=next;
+ if (start==INVALID) {
+ NodeIt n(g);
+ while (n!=INVALID && OutArcIt(g,n)==INVALID) ++n;
+ start=n;
+ }
+ if (start!=INVALID) {
+ for (NodeIt n(g); n!=INVALID; ++n) nedge[n]=OutArcIt(g,n);
+ while (nedge[start]!=INVALID) {
+ euler.push_back(nedge[start]);
+ Node next=g.target(nedge[start]);
+ ++nedge[start];
+ start=next;
+ }
}
}
@@ -171,15 +177,21 @@
EulerIt(const GR &gr, typename GR::Node start = INVALID)
: g(gr), nedge(g), visited(g, false)
{
- if(start==INVALID) start=NodeIt(g);
- for(NodeIt n(g);n!=INVALID;++n) nedge[n]=OutArcIt(g,n);
- while(nedge[start]!=INVALID) {
- euler.push_back(nedge[start]);
- visited[nedge[start]]=true;
- Node next=g.target(nedge[start]);
- ++nedge[start];
- start=next;
- while(nedge[start]!=INVALID && visited[nedge[start]]) ++nedge[start];
+ if (start==INVALID) {
+ NodeIt n(g);
+ while (n!=INVALID && OutArcIt(g,n)==INVALID) ++n;
+ start=n;
+ }
+ if (start!=INVALID) {
+ for (NodeIt n(g); n!=INVALID; ++n) nedge[n]=OutArcIt(g,n);
+ while(nedge[start]!=INVALID) {
+ euler.push_back(nedge[start]);
+ visited[nedge[start]]=true;
+ Node next=g.target(nedge[start]);
+ ++nedge[start];
+ start=next;
+ while(nedge[start]!=INVALID && visited[nedge[start]]) ++nedge[start];
+ }
}
}
More information about the Lemon-commits
mailing list