@SuppressWarnings("hiding") // squash warning on names of variables
	@Override
	public void findPaths(GDirectedGraph<V, E> g, V start, V end, Accumulator<List<V>> accumulator,
			TaskMonitor monitor) throws CancelledException {
		this.g = g;
		this.start = start;
		this.end = end;
		this.accumulator = accumulator;
		this.monitor = monitor;

		if (start.equals(end)) {
			// can't find the paths between a node and itself
			throw new IllegalArgumentException("Start and end vertex cannot be the same: " + start);
		}

		if (!g.containsVertex(start)) {
			throw new IllegalArgumentException("Start vertex is not in the graph: " + start);
		}

		if (!g.containsVertex(end)) {
			throw new IllegalArgumentException("End vertex is not in the graph: " + end);
		}

		find();
		listener.finished();
	}
Finds all paths between two vertices for a given graph.

<P>Note: this algorithm is based on the {@link JohnsonCircuitsAlgorithm}, modified to be
iterative instead of recursive. 

@param <V> the vertex type
@param <E> the edge type
Ghidra/Framework/Graph/src/main/java/ghidra/graph/algo/IterativeFindPathsAlgorithm.java