 	/// Executes Dijkstra's search algorithm over `graph` from `startVertex` using edge weights from
 	/// `edgeWeightMap`, calling `visitor` along the way.
 	static func dijkstraSearch<
-		Graph: IncidenceGraph & VertexListGraph,
+		SearchSpace: IncidenceGraph & VertexListGraph,
 		Distance: GraphDistanceMeasure,
 		EdgeWeightMap: GraphEdgePropertyMap,
 		Visitor: DijkstraVisitor
 	>(
-		_ graph: inout Graph,
+		_ graph: inout SearchSpace,
 		visitor: inout Visitor,
 		edgeWeightMap: EdgeWeightMap,
-		startAt startVertex: Graph.VertexId
-	) throws -> TableVertexPropertyMap<Graph, Distance>
+		startAt startVertex: SearchSpace.VertexId
+	) throws -> TableVertexPropertyMap<SearchSpace, Distance>
 	where
-		Graph.VertexId: IdIndexable,
-		EdgeWeightMap.Graph == Graph,
+		SearchSpace.VertexId: IdIndexable,
+		EdgeWeightMap.Graph == SearchSpace,
 		EdgeWeightMap.Value == Distance,
-		Visitor.Graph == Graph
+		Visitor.Graph == SearchSpace
 	{
 		var colorMap = TableVertexPropertyMap(repeating: VertexColor.white, for: graph)
 		var vertexDistanceMap = TableVertexPropertyMap(


/// Implements the majority of Dijkstra's algorithm in terms of BreadthFirstSearch.
private struct DijkstraBFSVisitor<
	Graph: IncidenceGraph & VertexListGraph,
	Distance: GraphDistanceMeasure,
	EdgeWeightMap: GraphEdgePropertyMap,
	VertexDistanceMap: MutableGraphVertexPropertyMap,
	Visitor: DijkstraVisitor
>: BFSVisitor
where
	Graph.VertexId: IdIndexable,
	EdgeWeightMap.Graph == Graph,
	EdgeWeightMap.Value == Distance,
	VertexDistanceMap.Graph == Graph,
	VertexDistanceMap.Value == Distance,
	Visitor.Graph == Graph
{
	/// The queue of verticies to visit.
	var queue = ConfigurableHeap<
		Graph.VertexId,
		Distance,
		Int32,  // TODO: make configurable!
		_IdIndexibleDictionaryHeapIndexer<Graph.VertexId, _ConfigurableHeapCursor<Int32>>>()
	/// The weights of the edges.
	let edgeWeightMap: EdgeWeightMap
	/// The distances from the start vertex to the final verticies.

		}
	}

	public mutating func grayDestination(_ edge: SearchSpace.EdgeId, _ graph: inout Graph) throws {
		let decreased = relaxTarget(edge, &graph)
		if decreased {
			try visitor.edgeRelaxed(edge, &graph)
