#include <iostream>
#include <list>
using namespace std;
struct Graph
{
int V;
list <int> *adj;
Graph(int _V)
{
V = _V;
adj = new list <int> [V];
}
void addEdge(int v, int w)
{
adj[v].push_back(w);
}
void DFSUtil(int v, bool visited[])
{
visited[v] = true;
cout<<v<<" ";
for(auto i: adj[v])
if(!visited[i])
DFSUtil(i, visited);
}
void DFS(int v)
{
bool *visited = new bool[V];
for(int i = 0; i < V; i++)
visited[i] = false;
DFSUtil(v, visited);
}
};
int main()
{
Graph g(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
cout << "Following is Depth First Traversal (starting from vertex 2) \n";
g.DFS(2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBHcmFwaAp7CglpbnQgVjsKCWxpc3QgPGludD4gKmFkajsKCQoJR3JhcGgoaW50IF9WKQoJewoJCVYgPSBfVjsKCQlhZGogPSBuZXcgbGlzdCA8aW50PiBbVl07Cgl9CgkKCXZvaWQgYWRkRWRnZShpbnQgdiwgaW50IHcpCgl7CgkJYWRqW3ZdLnB1c2hfYmFjayh3KTsKCX0KCQoJdm9pZCBERlNVdGlsKGludCB2LCBib29sIHZpc2l0ZWRbXSkKCXsKCQl2aXNpdGVkW3ZdID0gdHJ1ZTsKCQljb3V0PDx2PDwiICI7CgkJCgkJZm9yKGF1dG8gaTogYWRqW3ZdKQoJCQlpZighdmlzaXRlZFtpXSkKCQkJCURGU1V0aWwoaSwgdmlzaXRlZCk7Cgl9CgkKCXZvaWQgREZTKGludCB2KQoJewoJCWJvb2wgKnZpc2l0ZWQgPSBuZXcgYm9vbFtWXTsKCQlmb3IoaW50IGkgPSAwOyBpIDwgVjsgaSsrKQoJCQl2aXNpdGVkW2ldID0gZmFsc2U7CgkKCQlERlNVdGlsKHYsIHZpc2l0ZWQpOwoJfQp9OwoKaW50IG1haW4oKQp7CglHcmFwaCBnKDQpOwogICAgCiAgICBnLmFkZEVkZ2UoMCwgMSk7CiAgICBnLmFkZEVkZ2UoMCwgMik7CiAgICBnLmFkZEVkZ2UoMSwgMik7CiAgICBnLmFkZEVkZ2UoMiwgMCk7CiAgICBnLmFkZEVkZ2UoMiwgMyk7CiAgICBnLmFkZEVkZ2UoMywgMyk7CiAKICAgIGNvdXQgPDwgIkZvbGxvd2luZyBpcyBEZXB0aCBGaXJzdCBUcmF2ZXJzYWwgKHN0YXJ0aW5nIGZyb20gdmVydGV4IDIpIFxuIjsKICAgIGcuREZTKDIpOwoJCglyZXR1cm4gMDsKfQ==