# Python3 implementation of the approach # Class to represent a graph class Graph: def __init__(self, V): # No. of vertices self.V = V # Pointer to an array containing # adjacency lists self.adj = [[] for i in range(self.V)] def addEdge(self, src, des): self.adj[src].append(des) self.adj[des].append(src) # DFS function to keep track of # number of nodes def DFS(self, visited, src, curr_level, level, NumberOfNodes): # Mark the current vertex as visited visited[src] = True # If current level is equal # to the given level, increment # the no. of nodes if (level == curr_level): NumberOfNodes += 1 elif (level < curr_level): return else: # Recur for the vertices # adjacent to the current vertex for i in self.adj[src]: if (not visited[i]): curr_level += 1 curr_level, NumberOfNodes = self.DFS( visited, i, curr_level, level, NumberOfNodes) curr_level -= 1 return curr_level, NumberOfNodes # Function to return the number of nodes def NumOfNodes(self, level): # To keep track of current level curr_level = 0 # For keeping track of visited # nodes in DFS visited = [False for i in range(self.V)] # To store count of nodes at a # given level NumberOfNodes = 0 curr_level, NumberOfNodes = self.DFS( visited, 0, curr_level, level, NumberOfNodes) return NumberOfNodes # Driver code if __name__=='__main__': V = 8 g = Graph(8) g.addEdge(0, 1) g.addEdge(0, 4) g.addEdge(0, 7) g.addEdge(4, 6) g.addEdge(4, 5) g.addEdge(4, 2) g.addEdge(7, 3) level = 2 print(g.NumOfNodes(level)) # This code is contributed by pratham76