public Collection<Deque<AssemblyConstructorSemantic>> computeOptimalApplications(
			AssemblyPatternBlock src, String srcTable, AssemblyPatternBlock dst, String dstTable) {
		Vertex s = new Vertex(src, srcTable);
		Vertex xd = new Vertex(dst, dstTable);
		// Because we're working with masks, there may be many vertices that match dst
		// Find the one(s) with the shortest distance
		Set<Vertex> bestDests = new HashSet<>();
		Double bestDist = null;
		for (Entry<Vertex, Double> ent : dijkstra.getDistancesFromSource(s).entrySet()) {
			if (ent.getKey().matches(xd)) {
				if (bestDist == null || ent.getValue() < bestDist) {
					bestDests.clear();
					bestDests.add(ent.getKey());
					bestDist = ent.getValue();
				}
				else if (bestDist.equals(ent.getValue())) {
					bestDests.add(ent.getKey());
				}
			}
		}

		// Now collect all the shortest paths to those closest destinations
		Set<Deque<AssemblyConstructorSemantic>> result = new HashSet<>();
		for (Vertex d : bestDests) {
			Collection<Deque<Edge>> optimalPaths = dijkstra.computeOptimalPaths(s, d);
			for (Deque<Edge> path : optimalPaths) {
				Deque<AssemblyConstructorSemantic> sems = new LinkedList<>();
				for (Edge e : path) {
					sems.add(e.sem);
				}
				result.add(sems);
			}
		}
		return result;
	}
Compute the optimal, i.e., shortest, sequences of applications to resolve a given context to
another, often the language's default context.

@param src presumably, the language's default context
@param srcTable the name of the SLEIGH constructor table, presumably "instruction"
@param dst the context block being resolved
@param dstTable the name of the SLEIGH constructor table being resolved
@return a collection of sequences of constructor applications from {@code src} to {@code dst}

        NOTE: For assembly, the sequences will need to be applied right-to-left.
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/app/plugin/assembler/sleigh/sem/AssemblyContextGraph.java