pub fn bidijkstra<G, N>(
    edges: &Collection<G, (N, N)>,
    goals: &Collection<G, (N, N)>
) -> Collection<G, ((N, N), u32)>
where G: Scope, G::Timestamp: Lattice + Ord, N: ExchangeData + Hash,
Expand description

Returns the subset of goals that can reach each other in edges, with distance.

This method performs bidirectional search, from both ends of each goal in forward and reverse direction, for the sources and targets respectively. Each search can examine a fraction of the graph before meeting, and multiple searches can be managed concurrently.

Goals that cannot reach from the source to the target are relatively expensive, as the entire graph must be explored to confirm this. A graph connectivity pre-filter could be good insurance here.