示例#1
0
 /**
  * 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);
   }
 }