# 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