A number of art museums around the country have been featuri
A number of art museums around the country have been featuring work by an artist named Mark Lombardi (1951-2000), consisting of a set of intricately rendered graphs. Building on a great deal of research, these graphs encode the relationships among people involved in major political scandals over the past several decades: the nodes correspond to participants, and each edge indicates some type of relationship between a pair of participants. And so, if you peer closely enough at the drawings, you can trace out ominous-looking paths from a high-ranking U.S. government official, to a former business partner, to a bank in Switzerland, to a shadowy arms dealer. Such pictures form striking examples of social networks, which, as we discussed in Section have nodes representing people and organizations, and edges representing relationships of various kinds. And the short paths that abound in these networks have attracted considerable attention recently, as people ponder what they mean. In the case of Mark Lombardi\'s graphs, they hint at the short set of steps that can carry you from the reputable to the disreputable. Of course, a single, spurious short path between nodes v and w in such a network may be more coincidental than anything else; a large number of short paths between v and w can be much more convincing. So in addition to the problem of computing a single shortest v-w path in a graph G, social networks researchers have looked at the problem of determining the number of shortest v-w paths. This turns out to be a problem that can be solved efficiently. Suppose we are given an undirected graph G = (V, E), and we identify two nodes v and w in G. Give an algorithm that computes the number of shortest v-w paths in G. (The algorithm should not list all the paths; just the number suffices.) The running time of your algorithm should be O(m + n) for a graph with n nodes and m edges.
Solution
This can be done in O(m+n) with BFS.
Let us take graph G.
Do a BFS on the graph.
Mark every node in the graphs as visited as common with BFS.
In its place of adding just nodes to the queue in the DFS add nodes plus number of incoming paths.
If a node that has been visited should be added avoid it.
If you find a node again which is already present in your queue do not add it again, instead add the counts together.
Propagate the counts on the queue when adding new nodes
When you encounter the final node i.e. the destination node the number that is stored with it is the number of shortest paths in the graph.

