@Override
	public void checkGraph() throws AsymmetricException, CycleException, EX {
		Set<V> vertices = graph.getVertices();
		Map<V,Color> colors = new HashMap<>(vertices.size()*4/3+1);
		Map<V,V> predecessors = new HashMap<>(); // Could this be a simple sequence like TopologicalSorter?  Any benefit?
		for(V v : vertices) {
			if(!colors.containsKey(v)) doCheck(colors, predecessors, v);
		}
	}
@ Override public void checkGraph ( ) throws AsymmetricException , CycleException , EX { Set < V > vertices = graph . getVertices ( ) ; Map < V , Color > colors = new HashMap < > ( vertices . size ( ) * 4 / 3 + 1 ) ; Map < V , V > predecessors = new HashMap < > ( ) ; for ( V v : vertices ) { if ( ! colors . containsKey ( v ) ) doCheck ( colors , predecessors , v ) ; } }
Test the graph for cycles and makes sure that all connections are consistent with back connections.

Cycle algorithm adapted from:
http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/GraphAlgor/depthSearch.htm
http://www.eecs.berkeley.edu/~kamil/teaching/sp03/041403.pdf

In the case of a multigraph, any number of edges one direction is considered a match to any number
of edges back.  The number does not need to be equal.

@throws AsymmetricException where the edges are not symmetric
@throws CycleException if there is a cycle in the graph