gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Bug fix in the Euler iterators (#264) Handle the case when the first node is isolated.
0 1 0
default
1 file changed with 14 insertions and 2 deletions:
↑ Collapse diff ↑
Show white space 6 line context
... ...
@@ -78,7 +78,12 @@
78 78
    DiEulerIt(const GR &gr, typename GR::Node start = INVALID)
79 79
      : g(gr), nedge(g)
80 80
    {
81
      if(start==INVALID) start=NodeIt(g);
81
      if (start==INVALID) {
82
        NodeIt n(g);
83
        while (n!=INVALID && OutArcIt(g,n)==INVALID) ++n;
84
        start=n;
85
      }
86
      if (start!=INVALID) {
82 87
      for(NodeIt n(g);n!=INVALID;++n) nedge[n]=OutArcIt(g,n);
83 88
      while(nedge[start]!=INVALID) {
84 89
        euler.push_back(nedge[start]);
... ...
@@ -87,6 +92,7 @@
87 92
        start=next;
88 93
      }
89 94
    }
95
    }
90 96

	
91 97
    ///Arc Conversion
92 98
    operator Arc() { return euler.empty()?INVALID:euler.front(); }
... ...
@@ -171,7 +177,12 @@
171 177
    EulerIt(const GR &gr, typename GR::Node start = INVALID)
172 178
      : g(gr), nedge(g), visited(g, false)
173 179
    {
174
      if(start==INVALID) start=NodeIt(g);
180
      if (start==INVALID) {
181
        NodeIt n(g);
182
        while (n!=INVALID && OutArcIt(g,n)==INVALID) ++n;
183
        start=n;
184
      }
185
      if (start!=INVALID) {
175 186
      for(NodeIt n(g);n!=INVALID;++n) nedge[n]=OutArcIt(g,n);
176 187
      while(nedge[start]!=INVALID) {
177 188
        euler.push_back(nedge[start]);
... ...
@@ -182,6 +193,7 @@
182 193
        while(nedge[start]!=INVALID && visited[nedge[start]]) ++nedge[start];
183 194
      }
184 195
    }
196
    }
185 197

	
186 198
    ///Arc Conversion
187 199
    operator Arc() const { return euler.empty()?INVALID:euler.front(); }
0 comments (0 inline)