Given an undirected,unweighted graph and two vertices u and v,the task is to find the path between these two vertices.**u** can be considered as the source vertex and **v** as the destination vertex.

**Example-**

Number of vertices-5

Number of edges-4

Given vertices are 2 and 4.

Edges-

1 2

1 3

3 4

4 5

The path between 2 and 4 is **2->1->3->4.**

**Algorithm-**

1.DFS is called on vertex u.

2.A stack S is kept to keep track of the path between the source vertex and the current vertex.

3.As soon as destination vertex v is encountered,we return the path as the contents of the stack.

**Code-**

[cpp]

#include<stdio.h>

#include<vector>

#include<stack>

using namespace std;

vector<int>arr[10005];

int n,a,b,j=0,m;

int color[100005];

int u,v;

stack<int> path;

void dfs(int node)

{

//printing the vertices of the path

printf("%d->",node+1);

//until final vertex is reached

if(node!=v-1)

{

color[node]=2;//marking the visited nodes

for(int i=0;i<arr[node].size();++i)

{

if(color[arr[node][i]]==0)

{

dfs(arr[node][i]);

}

}

}

}

int main()

{

int t,p;

int i;

p=1;

j=0;

// n is the number of vertices

// m is the number of edges

scanf("%d %d",&n,&m);

// u is the source vertex

// v is the destination vertex

scanf("%d %d",&u,&v);

//clearing the arrays and vectors

for(i=0;i<n;i++)

arr[i].clear();

for(i=0;i<n;++i){

color[i]=0;

}

while(j<m)

{

//a and b denote the starting and ending points of the edge

scanf("%d %d",&a,&b);

//maintaining the adjacency lists

arr[a-1].push_back(b-1);

arr[b-1].push_back(a-1);

j++;

}

//calling dfs on source vertex

dfs(u-1);

return 0;

}

[/cpp]