[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