Print all paths from a given source to a destination in C++

C++Server Side ProgrammingProgramming

In this problem we are given a directed graph and we have to print all paths from the source to the destination of the graph.

Directed graph is a graph in with edges that are directed from vertex a to b.

Let’s take an example to understand the problem 

Source = K destination = P


K -> T -> Y -> A -> P
K -> T -> Y -> P
K -> A -> P

Here, we have found paths from K to P. We have traversed paths and printed all paths from K that direct us to P.

To solve this problem, we will traverse the graph using depth-first search traversal technique. Starting from source, we will traverse each vertex store in our path array and mark it as visited (to avoid multiple visiting of the same vertex). And print this path, when the destination vertex is reached.

Let’s see the program implementing the logic -


 Live Demo

#include <list>
using namespace std;
class Graph {
   int V;
   list<int> *adj;
   void findNewPath(int , int , bool [], int [], int &);
   Graph(int V);
   void addEdge(int u, int v);
   void printPaths(int s, int d);
Graph::Graph(int V) {
   this->V = V;
   adj = new list<int>[V];
void Graph::addEdge(int u, int v) {
void Graph::printPaths(int s, int d) {
   bool *visited = new bool[V];
   int *path = new int[V];
   int path_index = 0;
   for (int i = 0; i < V; i++)
   visited[i] = false;
   findNewPath(s, d, visited, path, path_index);
void Graph::findNewPath(int u, int d, bool visited[],
int path[], int &path_index) {
   visited[u] = true;
   path[path_index] = u;
   if (u == d) {
      for (int i = 0; i<path_index; i++)
      cout<<path[i]<<" ";
      cout << endl;
   } else {
      list<int>::iterator i;
      for (i = adj[u].begin(); i != adj[u].end(); ++i)
         if (!visited[*i])
            findNewPath(*i, d, visited, path, path_index);
   visited[u] = false;
int main() {
   Graph g(4);
   g.addEdge(0, 1);
   g.addEdge(0, 2);
   g.addEdge(0, 3);
   g.addEdge(2, 0);
   g.addEdge(2, 1);
   g.addEdge(1, 3);
   int s = 2, d = 3;
   cout<<"Following are all different paths from source to destination : \n";
   g.printPaths(s, d);
   return 0;


Following are all different paths from source to destination :
2 0 1 3
2 0 3
2 1 3
Published on 16-Jan-2020 17:12:36