/** * Perform a traversal of G over all vertices reachable from V. ORDER determines the ordering in * which the successors to the set of traversed vertices are visited. */ public void traverse(Graph<VLabel, ELabel> G, Vertex<VLabel> v, Comparator<VLabel> order) { _graph = G; if (_fringe.isEmpty()) { _fringe.add(v); } _order = order; while (!_fringe.isEmpty()) { Collections.sort(_fringe, new VertexComparator()); Vertex<VLabel> vert = _fringe.get(0); if (!_markedVertices.contains(vert)) { _markedVertices.add(vert); try { _finalEdge = null; _finalVertex = vert; this.visit(vert); } catch (StopException e) { return; } catch (RejectException e) { continue; } Iterator<Edge<VLabel, ELabel>> iter = G.outEdges(vert); while (iter.hasNext()) { Edge<VLabel, ELabel> nextEdge = iter.next(); if (!_markedEdges.contains(nextEdge)) { _markedEdges.add(nextEdge); try { _finalVertex = null; _finalEdge = nextEdge; this.preVisit(nextEdge, vert); } catch (StopException e) { return; } catch (RejectException e) { continue; } if (!_fringe.contains(nextEdge.getV1())) { _fringe.add(nextEdge.getV1()); } } } } _fringe.remove(0); } }