# C++ Program to Find Path Between Two Nodes in a Graph

C++Server Side ProgrammingProgramming

In this Program we can find out whether path exists between two nodes by using DFS on given graph.

## Algorithm

Begin
function isReach() is a recursive function to check whether d is reachable to s :
A) Mark all the vertices as unvisited.
B) Mark the current node as visited and enqueue it and it will be used to get all adjacent vertices of a vertex
C) Dequeue a vertex from queue and print it
D) Get all adjacent vertices of the dequeued vertex s
E) If an adjacent has not been visited, then mark it visited and enqueue it
F) If this adjacent node is the destination node, then return true else continue to BFS
End

## Example

#include <iostream>
#include <list>
using namespace std;
class G {
int n;
public:
//declaration of functions
G(int n);
bool isReach(int s, int d);
};
G::G(int n) {
this->n = n;
}
}
bool G::isReach(int s, int d) {
if (s == d)
return true;
//Mark all the vertices as unvisited.
bool *visited = new bool[n];
for (int i = 0; i < n; i++)
visited[i] = false;
list<int> queue;
//Mark the current node as visited and enqueue it and it will be used to get all adjacent vertices of a vertex
visited[s] = true;
queue.push_back(s);
list<int>::iterator i;
while (!queue.empty()) {
s = queue.front();
queue.pop_front(); //Dequeue a vertex from queue and print it
//If an adjacent has not been visited, then mark it visited and enqueue it
if (*i == d)
return true;
// If this adjacent node is the destination node, then return true else continue to BFS
if (!visited[*i]) {
visited[*i] = true;
queue.push_back(*i);
}
}
}
return false;
}
int main() {
G g(4);
cout << "Enter the source and destination vertices: (0-3)";
int a, b;
cin >> a >> b;
if (g.isReach(a, b))
cout << "\nThere is a path from " << a << " to " << b;
else
cout << "\nThere is no path from " << a << " to " << b;
int t;
t = a;
a = b;
b = t;
if (g.isReach(a, b))
cout << "\nThere is a path from " << a << " to " << b;
else
cout << "\nThere is no path from " << a << " to " << b;
return 0;
}

## Output

Enter the source and destination vertices: (0-3)
There is a path from 3 to 1
There is a path from 1 to 3