Example #1
0
 /**
  * Checks for any coincident ends of edges.
  *
  * @return a List of the coincident edges, if any
  */
 public Set checkCoincidentEdges() {
   Set coincidentEdges = new HashSet();
   for (Iterator i = nodeIterator(); i.hasNext(); ) {
     Node node = (Node) i.next();
     DirectedEdgeStar deStar = node.getOutEdges();
     DirectedEdge firstDE = null;
     DirectedEdge prevDE = null;
     for (Iterator j = deStar.iterator(); j.hasNext(); ) {
       DirectedEdge de = (DirectedEdge) j.next();
       if (firstDE == null) firstDE = de;
       if (prevDE != null) {
         if (isCoincidentEdge(de, prevDE)) {
           coincidentEdges.add(de.getEdge());
           coincidentEdges.add(prevDE.getEdge());
         }
       }
       prevDE = de;
     }
     if (firstDE != prevDE)
       if (isCoincidentEdge(firstDE, prevDE)) {
         coincidentEdges.add(firstDE.getEdge());
         coincidentEdges.add(prevDE.getEdge());
       }
   }
   return coincidentEdges;
 }
Example #2
0
  public void traverseBFS(Node<N, E> startingNode, BFSTraversalVisitor tv, boolean longestPath) {

    if (longestPath) {
      markReachable(startingNode);
    }

    for (Node<N, E> n : getNodes()) {
      n.setVisited(false);
      n.setActive(false);
    }

    Queue<Node<N, E>> queue = new LinkedList<Node<N, E>>();
    queue.add(startingNode);
    startingNode.setVisited(true);
    int layer = 0;
    Node<N, E> lastOfLayer = startingNode;
    Node<N, E> lastAdded = null;

    while (!queue.isEmpty()) {

      Node<N, E> current = queue.poll();
      tv.visitNode(current, layer);
      current.setActive(false);

      for (Edge<N, E> e : current.getOutEdges()) {
        if (!e.getDest().isVisited()) {

          boolean allow = true;
          if (longestPath) {
            for (Node<N, E> pred : e.getDest().getPredecessors()) {
              if ((!pred.isVisited() || pred.isActive()) && pred.isReachable()) {
                allow = false;
                break;
              }
            }
          }

          if (allow) {
            queue.offer(e.getDest());
            lastAdded = e.getDest();
            e.getDest().setVisited(true);
            e.getDest().setActive(true);
          }
        }
      }

      if (current == lastOfLayer && !queue.isEmpty()) {
        lastOfLayer = lastAdded;
        layer++;
      }
    }
  }
Example #3
0
  private void traverse(DFSTraversalVisitor tv, Node<N, E> n) {

    if (!n.isVisited()) {
      n.setVisited(true);
      n.setActive(true);
      tv.visitNode(n);

      for (Edge<N, E> e : n.getOutEdges()) {

        Node<N, E> next = e.getDest();
        if (next.isActive()) {
          tv.visitEdge(e, true);
        } else {
          if (tv.visitEdge(e, false)) {
            traverse(tv, next);
          }
        }
      }

      n.setActive(false);
    }
  }