code: private boolean processEdges(Node current, Collection<Edge> edges)
  	{
  		for (Edge edge : edges)
  		{
  			if (!result.contains(edge)) continue;
  			
  			// Label the edge considering direction of traversal and type of current node
  
  			setLabel(edge, getLabel(current));
  
  			// Get the other end of the edge
  			Node neigh = edge.getSourceNode() == current ?
  				edge.getTargetNode() : edge.getSourceNode();
  
  			// Process the neighbor if not processed or not in queue
  
  			if (getColor(neigh) == WHITE)
  			{
  				// Label the neighbor according to the search direction and node type
  
  				if (neigh.isBreadthNode())
  				{
  					setLabel(neigh, getLabel(current) + 1);
  				}
  				else
  				{
  					setLabel(neigh, getLabel(edge));
  				}
  
  				// Check if we need to stop traversing the neighbor, enqueue otherwise
  
  				if (getLabel(neigh) == limit || isEquivalentInTheSet(neigh, ST))
  				{
  					return true;
  				}
  
  				setColor(neigh, GRAY);
  
  				// Enqueue the node according to its type
  
  				if (neigh.isBreadthNode())
  				{
  					queue.addLast(neigh);
  				}
  				else
  				{
  					// Non-breadth nodes are added in front of the queue
  					queue.addFirst(neigh);
  				}
  
  				labelEquivRecursive(neigh, UPWARD, getLabel(neigh), true, !neigh.isBreadthNode());
  				labelEquivRecursive(neigh, DOWNWARD, getLabel(neigh), true, !neigh.isBreadthNode());
  			}
  		}
  		return false;
  	}
docs: Continue evaluating the next edge.
  @param current Current node
  @param edges The edge to evaluate
  @return False if a cycle is detected