// C++ program to print DFS traversal from
// a given vertex in a given graph
#include<iostream>
#include<list>
using namespace std;
// Graph class represents a directed graph
// using adjacency list representation
class Graph
{
int V; // No. of vertices
// Pointer to an array containing
// adjacency lists
list<int> *adj;
// A recursive function used by DFS
void DFSUtil(int v, bool visited[]);
public:
Graph(int V); // Constructor
// function to add an edge to graph
void addEdge(int v, int w);
// DFS traversal of the vertices
// reachable from v
void DFS(int v);
};
Graph::Graph(int V)
{
this->V = V;
adj = new list<int>[V];
}
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w); // Add w to v’s list.
}
void Graph::DFSUtil(int v, bool visited[])
{
// Mark the current node as visited and
// print it
visited[v] = true;
cout << v << " ";
// Recur for all the vertices adjacent
// to this vertex
list<int>::iterator i;
for (i = adj[v].begin(); i != adj[v].end(); ++i)
if (!visited[*i])
DFSUtil(*i, visited);
}
// DFS traversal of the vertices reachable from v.
// It uses recursive DFSUtil()
void Graph::DFS(int v)
{
// Mark all the vertices as not visited
bool *visited = new bool[V];
for (int i = 0; i < V; i++)
visited[i] = false;
// Call the recursive helper function
// to print DFS traversal
DFSUtil(v, visited);
}
int test()
{
// Create a graph given in the above diagram
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;
}
int main()
{
int V,A[2];
cin>>V;
Graph g(V);
while ( cin>> A[0]>>A[1] ) {
if (A[0]<0 || A[1]<0 || A[0]>=V || A[1]>=V)
cout << A[0]<<"->"<<A[1]<<" refers to a non-existent node"<<endl;
else g.addEdge(A[0], A[1]);
}
g.DFS(2);
return 0;
}
Ly8gQysrIHByb2dyYW0gdG8gcHJpbnQgREZTIHRyYXZlcnNhbCBmcm9tIAovLyBhIGdpdmVuIHZlcnRleCBpbiBhICBnaXZlbiBncmFwaCAKI2luY2x1ZGU8aW9zdHJlYW0+IAojaW5jbHVkZTxsaXN0PiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgCgovLyBHcmFwaCBjbGFzcyByZXByZXNlbnRzIGEgZGlyZWN0ZWQgZ3JhcGggCi8vIHVzaW5nIGFkamFjZW5jeSBsaXN0IHJlcHJlc2VudGF0aW9uIApjbGFzcyBHcmFwaCAKeyAKICAgIGludCBWOyAgICAvLyBOby4gb2YgdmVydGljZXMgCgogICAgLy8gUG9pbnRlciB0byBhbiBhcnJheSBjb250YWluaW5nIAogICAgLy8gYWRqYWNlbmN5IGxpc3RzIAogICAgbGlzdDxpbnQ+ICphZGo7IAoKICAgIC8vIEEgcmVjdXJzaXZlIGZ1bmN0aW9uIHVzZWQgYnkgREZTIAogICAgdm9pZCBERlNVdGlsKGludCB2LCBib29sIHZpc2l0ZWRbXSk7IApwdWJsaWM6IAogICAgR3JhcGgoaW50IFYpOyAgIC8vIENvbnN0cnVjdG9yIAoKICAgIC8vIGZ1bmN0aW9uIHRvIGFkZCBhbiBlZGdlIHRvIGdyYXBoIAogICAgdm9pZCBhZGRFZGdlKGludCB2LCBpbnQgdyk7IAoKICAgIC8vIERGUyB0cmF2ZXJzYWwgb2YgdGhlIHZlcnRpY2VzIAogICAgLy8gcmVhY2hhYmxlIGZyb20gdiAKICAgIHZvaWQgREZTKGludCB2KTsgCn07IAoKR3JhcGg6OkdyYXBoKGludCBWKSAKeyAKICAgIHRoaXMtPlYgPSBWOyAKICAgIGFkaiA9IG5ldyBsaXN0PGludD5bVl07IAp9IAoKdm9pZCBHcmFwaDo6YWRkRWRnZShpbnQgdiwgaW50IHcpIAp7IAogICAgYWRqW3ZdLnB1c2hfYmFjayh3KTsgLy8gQWRkIHcgdG8gduKAmXMgbGlzdC4gCn0gCgp2b2lkIEdyYXBoOjpERlNVdGlsKGludCB2LCBib29sIHZpc2l0ZWRbXSkgCnsgCiAgICAvLyBNYXJrIHRoZSBjdXJyZW50IG5vZGUgYXMgdmlzaXRlZCBhbmQgCiAgICAvLyBwcmludCBpdCAKICAgIHZpc2l0ZWRbdl0gPSB0cnVlOyAKICAgIGNvdXQgPDwgdiA8PCAiICI7IAoKICAgIC8vIFJlY3VyIGZvciBhbGwgdGhlIHZlcnRpY2VzIGFkamFjZW50IAogICAgLy8gdG8gdGhpcyB2ZXJ0ZXggCiAgICBsaXN0PGludD46Oml0ZXJhdG9yIGk7IAogICAgZm9yIChpID0gYWRqW3ZdLmJlZ2luKCk7IGkgIT0gYWRqW3ZdLmVuZCgpOyArK2kpIAogICAgICAgIGlmICghdmlzaXRlZFsqaV0pIAogICAgICAgICAgICBERlNVdGlsKCppLCB2aXNpdGVkKTsgCn0gCgovLyBERlMgdHJhdmVyc2FsIG9mIHRoZSB2ZXJ0aWNlcyByZWFjaGFibGUgZnJvbSB2LiAKLy8gSXQgdXNlcyByZWN1cnNpdmUgREZTVXRpbCgpIAp2b2lkIEdyYXBoOjpERlMoaW50IHYpIAp7IAogICAgLy8gTWFyayBhbGwgdGhlIHZlcnRpY2VzIGFzIG5vdCB2aXNpdGVkIAogICAgYm9vbCAqdmlzaXRlZCA9IG5ldyBib29sW1ZdOyAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVjsgaSsrKSAKICAgICAgICB2aXNpdGVkW2ldID0gZmFsc2U7IAoKICAgIC8vIENhbGwgdGhlIHJlY3Vyc2l2ZSBoZWxwZXIgZnVuY3Rpb24gCiAgICAvLyB0byBwcmludCBERlMgdHJhdmVyc2FsIAogICAgREZTVXRpbCh2LCB2aXNpdGVkKTsgCn0gCgppbnQgdGVzdCgpIAp7IAogICAgLy8gQ3JlYXRlIGEgZ3JhcGggZ2l2ZW4gaW4gdGhlIGFib3ZlIGRpYWdyYW0gCiAgICBHcmFwaCBnKDQpOyAKICAgIGcuYWRkRWRnZSgwLCAxKTsgCiAgICBnLmFkZEVkZ2UoMCwgMik7IAogICAgZy5hZGRFZGdlKDEsIDIpOyAKICAgIGcuYWRkRWRnZSgyLCAwKTsgCiAgICBnLmFkZEVkZ2UoMiwgMyk7IAogICAgZy5hZGRFZGdlKDMsIDMpOyAKCiAgICBjb3V0IDw8ICJGb2xsb3dpbmcgaXMgRGVwdGggRmlyc3QgVHJhdmVyc2FsIgogICAgICAgICAgICAiIChzdGFydGluZyBmcm9tIHZlcnRleCAyKSBcbiI7IAogICAgZy5ERlMoMik7IAoKICAgIHJldHVybiAwOyAKfQoKaW50IG1haW4oKSAKeyAKICAgIGludCBWLEFbMl07CiAgICBjaW4+PlY7CiAgICBHcmFwaCBnKFYpOyAKICAgIHdoaWxlICggY2luPj4gQVswXT4+QVsxXSApIHsKICAgICAgIGlmIChBWzBdPDAgfHwgQVsxXTwwIHx8IEFbMF0+PVYgfHwgQVsxXT49VikKICAgICAgICAgICBjb3V0IDw8IEFbMF08PCItPiI8PEFbMV08PCIgcmVmZXJzIHRvIGEgbm9uLWV4aXN0ZW50IG5vZGUiPDxlbmRsOwogICAgICAgZWxzZSBnLmFkZEVkZ2UoQVswXSwgQVsxXSk7CiAgICB9CiAgICBnLkRGUygyKTsKICAgIHJldHVybiAwOyAKfQ==