Finding the shortest path
The algorithms presented earlier traversed the graph vertex by vertex and returned a lazy sequence of all the nodes in the graph. They were convenient for illustrating the two primary ways of navigating the graph structures. However, a more common task would be to find the shortest path from one vertex to another. This means that we'll be interested only in the sequence of nodes that lie between them.
If we have an unweighted graph, such as the previous graphs, we'll usually count the distance as the number of "hops": a hop being the step between two neighboring nodes. The shortest path will have the fewest number of hops. Breadth-first search is, in general, a more efficient algorithm to use in this case.
Loom implements the breadth-first shortest path as the bf-path
function. To demonstrate it, let's load a more complex Twitter graph:
(defn ex-8-7 [] (->> (load-edges "twitter/396721965.edges") (apply loom/digraph...