# C++ Program to Find Whether a Path Exists Between 2 Given Nodes

C++Server Side ProgrammingProgramming

#### C in Depth: The Complete C Programming Guide for Beginners

45 Lectures 4.5 hours

#### Practical C++: Learn C++ Basics Step by Step

Most Popular

50 Lectures 4.5 hours

#### Master C and Embedded C Programming- Learn as you go

Best Seller

66 Lectures 5.5 hours

This is a C++ program to find whether a path exists between 2 given nodes

## 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;
list<int> *adj;
public:
G(int n);
void addEd(int x, int w);
bool isReach(int s, int d);
};
G::G(int n) { //constructor
this->n = n;
adj = new list<int> [n];
}
void G::addEd(int x, int w) { //adding edge to the graph
adj[x].push_back(w); //ad w to x’s list
}
bool G::isReach(int s, int d) {
if (s == d)
return true;
bool *visited = new bool[n];
//Mark all the vertices as unvisited.
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 a adjacent has not been visited,
for (i = adj[s].begin(); i != adj[s].end(); ++i) {
if (*i == d)
return true;
if (!visited[*i]) {
visited[*i] = true;
queue.push_back(*i);
}
}
}
return false;
}
int main() {
G g(4);
g.addEd(1, 3);
g.addEd(0, 1);
g.addEd(2, 3);
g.addEd(1, 0);
g.addEd(2, 1);
g.addEd(3, 1);
cout << "Enter the source and destination vertices: (0-3)";
int a, b;
cin >> a >> b;
if (g.isReach(a, b))
cout << "There is a path from " << a << " to " << b;
else
cout << "There is no path from " << a << " to " << b;
int t;
t = a;
a = b;
b= t;
if (g.isReach(a, b))
cout << "There is a path from " << a << " to " << b;
else
cout << "There 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
Updated on 30-Jul-2019 22:30:26

Advertisements