// C++ implementation
#include <bits/stdc++.h>
using namespace std;
// An utility function to add an edge in an
// undirected graph.
void addEdge(vector<int> v[],
int x,
int y)
{
v[x].push_back(y);
v[y].push_back(x);
}
// A function to print the path between
// the given pair of nodes.
void printPath(vector<int> stack)
{
int i;
for (i = 0; i < (int)stack.size() - 1;
i++) {
cout << stack[i] << " -> ";
}
cout << stack[i];
}
// An utility function to do
// DFS of graph recursively
// from a given vertex x.
void DFS(vector<int> v[],
bool vis[],
int x,
int y,
vector<int> stack)
{
stack.push_back(x);
if (x == y) {
// print the path and return on
// reaching the destination node
printPath(stack);
return;
}
vis[x] = true;
// A flag variable to keep track
// if backtracking is taking place
int flag = 0;
if (!v[x].empty()) {
for (int j = 0; j < v[x].size(); j++) {
// if the node is not visited
if (vis[v[x][j]] == false) {
DFS(v, vis, v[x][j], y, stack);
flag = 1;
}
}
}
if (flag == 0) {
// If backtracking is taking
// place then pop
stack.pop_back();
}
}
// A utility function to initialise
// visited for the node and call
// DFS function for a given vertex x.
void DFSCall(int x,
int y,
vector<int> v[],
int n,
vector<int> stack)
{
// visited array
bool vis[n + 1];
memset(vis, false, sizeof(vis));
// DFS function call
DFS(v, vis, x, y, stack);
}
// Driver Code
int main()
{
int n = 11;
vector<int> v[n], stack;
// Vertex numbers should be from 1 to 9.
addEdge(v, 1, 2);
addEdge(v, 1, 3);
addEdge(v, 3, 4);
addEdge(v, 4, 5);
addEdge(v, 5, 6);
addEdge(v, 2, 7);
addEdge(v, 6, 8);
addEdge(v, 8, 10);
addEdge(v, 7, 9);
// Function Call
DFSCall(7, 8, v, n, stack);
return 0;
}
Ly8gQysrIGltcGxlbWVudGF0aW9uIAojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4gCnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAoKLy8gQW4gdXRpbGl0eSBmdW5jdGlvbiB0byBhZGQgYW4gZWRnZSBpbiBhbiAKLy8gdW5kaXJlY3RlZCBncmFwaC4gCnZvaWQgYWRkRWRnZSh2ZWN0b3I8aW50PiB2W10sIAoJCQlpbnQgeCwgCgkJCWludCB5KSAKeyAKCXZbeF0ucHVzaF9iYWNrKHkpOyAKCXZbeV0ucHVzaF9iYWNrKHgpOyAKfSAKCi8vIEEgZnVuY3Rpb24gdG8gcHJpbnQgdGhlIHBhdGggYmV0d2VlbiAKLy8gdGhlIGdpdmVuIHBhaXIgb2Ygbm9kZXMuIAp2b2lkIHByaW50UGF0aCh2ZWN0b3I8aW50PiBzdGFjaykgCnsgCglpbnQgaTsgCglmb3IgKGkgPSAwOyBpIDwgKGludClzdGFjay5zaXplKCkgLSAxOyAKCQlpKyspIHsgCgkJY291dCA8PCBzdGFja1tpXSA8PCAiIC0+ICI7IAoJfSAKCWNvdXQgPDwgc3RhY2tbaV07IAp9IAoKLy8gQW4gdXRpbGl0eSBmdW5jdGlvbiB0byBkbyAKLy8gREZTIG9mIGdyYXBoIHJlY3Vyc2l2ZWx5IAovLyBmcm9tIGEgZ2l2ZW4gdmVydGV4IHguIAp2b2lkIERGUyh2ZWN0b3I8aW50PiB2W10sIAoJCWJvb2wgdmlzW10sIAoJCWludCB4LCAKCQlpbnQgeSwgCgkJdmVjdG9yPGludD4gc3RhY2spIAp7IAoJc3RhY2sucHVzaF9iYWNrKHgpOyAKCWlmICh4ID09IHkpIHsgCgoJCS8vIHByaW50IHRoZSBwYXRoIGFuZCByZXR1cm4gb24gCgkJLy8gcmVhY2hpbmcgdGhlIGRlc3RpbmF0aW9uIG5vZGUgCgkJcHJpbnRQYXRoKHN0YWNrKTsgCgkJcmV0dXJuOyAKCX0gCgl2aXNbeF0gPSB0cnVlOyAKCgkvLyBBIGZsYWcgdmFyaWFibGUgdG8ga2VlcCB0cmFjayAKCS8vIGlmIGJhY2t0cmFja2luZyBpcyB0YWtpbmcgcGxhY2UgCglpbnQgZmxhZyA9IDA7IAoJaWYgKCF2W3hdLmVtcHR5KCkpIHsgCgkJZm9yIChpbnQgaiA9IDA7IGogPCB2W3hdLnNpemUoKTsgaisrKSB7IAoJCQkvLyBpZiB0aGUgbm9kZSBpcyBub3QgdmlzaXRlZCAKCQkJaWYgKHZpc1t2W3hdW2pdXSA9PSBmYWxzZSkgeyAKCQkJCURGUyh2LCB2aXMsIHZbeF1bal0sIHksIHN0YWNrKTsgCgkJCQlmbGFnID0gMTsgCgkJCX0gCgkJfSAKCX0gCglpZiAoZmxhZyA9PSAwKSB7IAoKCQkvLyBJZiBiYWNrdHJhY2tpbmcgaXMgdGFraW5nIAoJCS8vIHBsYWNlIHRoZW4gcG9wIAoJCXN0YWNrLnBvcF9iYWNrKCk7IAoJfSAKfSAKCi8vIEEgdXRpbGl0eSBmdW5jdGlvbiB0byBpbml0aWFsaXNlIAovLyB2aXNpdGVkIGZvciB0aGUgbm9kZSBhbmQgY2FsbCAKLy8gREZTIGZ1bmN0aW9uIGZvciBhIGdpdmVuIHZlcnRleCB4LiAKdm9pZCBERlNDYWxsKGludCB4LCAKCQkJaW50IHksIAoJCQl2ZWN0b3I8aW50PiB2W10sIAoJCQlpbnQgbiwgCgkJCXZlY3RvcjxpbnQ+IHN0YWNrKSAKeyAKCS8vIHZpc2l0ZWQgYXJyYXkgCglib29sIHZpc1tuICsgMV07IAoKCW1lbXNldCh2aXMsIGZhbHNlLCBzaXplb2YodmlzKSk7IAoKCS8vIERGUyBmdW5jdGlvbiBjYWxsIAoJREZTKHYsIHZpcywgeCwgeSwgc3RhY2spOyAKfSAKCi8vIERyaXZlciBDb2RlIAppbnQgbWFpbigpIAp7IAoJaW50IG4gPSAxMTsgCgl2ZWN0b3I8aW50PiB2W25dLCBzdGFjazsgCgoJLy8gVmVydGV4IG51bWJlcnMgc2hvdWxkIGJlIGZyb20gMSB0byA5LiAKCWFkZEVkZ2UodiwgMSwgMik7IAoJYWRkRWRnZSh2LCAxLCAzKTsgCglhZGRFZGdlKHYsIDMsIDQpOyAKCWFkZEVkZ2UodiwgNCwgNSk7IAoJYWRkRWRnZSh2LCA1LCA2KTsgCglhZGRFZGdlKHYsIDIsIDcpOyAKCWFkZEVkZ2UodiwgNiwgOCk7IAoJYWRkRWRnZSh2LCA4LCAxMCk7IAoJYWRkRWRnZSh2LCA3LCA5KTsKCgkvLyBGdW5jdGlvbiBDYWxsIAoJREZTQ2FsbCg3LCA4LCB2LCBuLCBzdGFjayk7IAoKCXJldHVybiAwOyAKfSAK