# Python3 program to count number of shortest # paths from a given source to every other # vertex using BFS. from collections import deque from sys import maxsize as INT_MAX # Traverses graph in BFS manner. It fills # dist[] and paths[] def BFS(adj: list, src: int, dist: list, paths: list, n: int): visited = [False] * n dist[src] = 0 paths[src] = 1 q = deque() q.append(src) visited[src] = True while q: curr = q[0] q.popleft() # For all neighbors of current vertex do: for x in adj[curr]: # if the current vertex is not yet # visited, then push it to the queue. if not visited[x]: q.append(x) visited[x] = True # check if there is a better path. if dist[x] > dist[curr] + 1: dist[x] = dist[curr] + 1 paths[x] = paths[curr] # additional shortest paths found elif dist[x] == dist[curr] + 1: paths[x] += paths[curr] # function to find number of different # shortest paths form given vertex s. # n is number of vertices. def findShortestPaths(adj: list, s: int, n: int): dist = [INT_MAX] * n paths = [0] * n BFS(adj, s, dist, paths, n) print("Numbers of shortest Paths are:", end=" ") for i in paths: print(i, end=" ") # A utility function to add an edge in a # directed graph. def addEdge(adj: list, u: int, v: int): adj[u].append(v) # Driver Code if __name__ == "__main__": n = 7 # Number of vertices adj = [0] * n for i in range(n): adj[i] = [] addEdge(adj, 0, 1) addEdge(adj, 0, 2) addEdge(adj, 1, 2) addEdge(adj, 1, 3) addEdge(adj, 2, 3) addEdge(adj, 3, 4) addEdge(adj, 3, 5) addEdge(adj, 4, 6) addEdge(adj, 5, 6) findShortestPaths(adj, 0, 7) # This code is contributed by # sanjeev2552