#include <bits/stdc++.h>
using
namespace
std;
class
Graph {
int
V;
list<
int
>* adj;
void
DFS(vector<
bool
>& visited,
int
src,
int
& curr_level,
int
level,
int
& NumberOfNodes);
public
:
Graph(
int
V);
void
addEdge(
int
src,
int
des);
int
NumOfNodes(
int
level);
};
Graph::Graph(
int
V)
{
this
->V = V;
adj =
new
list<
int
>[V];
}
void
Graph::addEdge(
int
src,
int
des)
{
adj[src].push_back(des);
adj[des].push_back(src);
}
void
Graph::DFS(vector<
bool
>& visited,
int
src,
int
& curr_level,
int
level,
int
& NumberOfNodes)
{
visited[src] =
true
;
if
(level == curr_level) {
NumberOfNodes++;
}
else
if
(level < curr_level)
return
;
else
{
list<
int
>::iterator i;
for
(i = adj[src].begin(); i != adj[src].end(); i++) {
if
(!visited[*i]) {
curr_level++;
DFS(visited, *i, curr_level, level, NumberOfNodes);
}
}
}
curr_level--;
}
int
Graph::NumOfNodes(
int
level)
{
int
curr_level = 0;
vector<
bool
> visited(V,
false
);
int
NumberOfNodes = 0;
DFS(visited, 0, curr_level, level, NumberOfNodes);
return
NumberOfNodes;
}
int
main()
{
int
V = 8;
Graph g(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);
int
level = 2;
cout << g.NumOfNodes(level);
return
0;
}