code: private boolean pushEdge(final KamEdge edge,
              final SetStack<KamNode> nodeStack,
              final SetStack<KamEdge> edgeStack) {
  
          if (edgeStack.contains(edge)) {
              return false;
          }
  
          final KamNode currentNode = nodeStack.peek();
          final KamNode edgeOppositeNode =
                  (edge.getSourceNode() == currentNode ? edge
                          .getTargetNode() : edge.getSourceNode());
  
          if (nodeStack.contains(edgeOppositeNode)) {
              return false;
          }
  
          nodeStack.push(edgeOppositeNode);
          edgeStack.push(edge);
          return true;
      }
docs: Determines whether the edge can be traversed.  This implementation will
  check if the {@link KamNode} or {@link KamEdge} have been visited to
  ensure there are no cycles in the resulting paths.
  <p>
  If the edge can be travered it will be placed on the edge {@link Stack},
  and the edge's unvisited node will be placed on the node {@link Stack}.
  </p>
  
  @param edge {@link KamEdge}, the kam edge to evaluate
  @param nodeStack {@link Stack} of {@link KamNode}, the nodes on the
  current scan from the <tt>source</tt>
  @param edgeStack {@link Stack} of {@link KamEdge}, the edges on the
  current scan from the <tt>source</tt>
  @return <tt>true</tt> if the edge will be traversed, <tt>false</tt> if
  not