public void compute(boolean uniqueCircuits, TaskMonitor monitor) throws CancelledException {
		Set<Set<V>> stronglyConnected = GraphAlgorithms.getStronglyConnectedComponents(g);

		for (Set<V> set : stronglyConnected) {
			if (set.size() < 2) {
				continue;
			}

			subGraph = GraphAlgorithms.createSubGraph(g, set);
			List<V> vertices = new ArrayList<>(subGraph.getVertices());

			int size = vertices.size() - 1;
			if (uniqueCircuits) {
				size += 1;
			}

			for (int i = 0; i < size; i++) {
				startVertex = vertices.get(i);

				blockedSet.clear();
				blockedBackEdgesMap.clear();
				circuit(startVertex, 0, monitor);

				if (uniqueCircuits) {
					subGraph.removeVertex(startVertex);
				}
			}
		}
	}
Finds the circuits in the graph passed at construction time.

@param uniqueCircuits true signals to return only unique circuits, where no two 
       circuits will contain the same vertex
@param monitor the task monitor
@throws CancelledException if the monitor is cancelled
Ghidra/Framework/Graph/src/main/java/ghidra/graph/algo/JohnsonCircuitsAlgorithm.java