Given a Directed Graph and two vertices in it, check whether there is a path from the first given vertex to second.

**Example:**

Input :(u, v) = (1, 3)

Output:Yes

Explanation:

There is a path from 1 to 3, 1 -> 2 -> 3

Input :(u, v) = (3, 6)

Output:No

Explanation:

There is no path from 3 to 6

A BFS or DFS based solution of this problem is discuss here.

**Approach :** Here we will discuss a Dynamic Programming based solution using Floyd Warshall Algorithm.

- Create a boolean 2D matrix
**mat**where**mat[i][j]**will be true if there is a path from vertex**i**to**j**. - For every starting vertex
**i**and ending vertex**j**iterate over all intermediate vertex**k**and do check if there is a path for**i**to**j**through**k**then mark**mat[i][j]**as true. - Finally check if
**mat[u][v]**is true then return true else return false.

Below is the implementation of the above approach :

## C++

`// C++ program to find if there is a ` `// path between two vertices in a ` `// directed graph using Dynamic Programming ` ` ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` `#define X 6 ` `#define Z 2 ` ` ` `// function to find if there is a ` `// path between two vertices in a ` `// directed graph ` `bool` `existPath(` `int` `V, ` `int` `edges[X][Z], ` ` ` `int` `u, ` `int` `v) ` `{ ` ` ` `// dp matrix ` ` ` `bool` `mat[V][V]; ` ` ` `memset` `(mat, ` `false` `, ` `sizeof` `(mat)); ` ` ` ` ` `// set dp[i][j]=true if there is ` ` ` `// edge between i to j ` ` ` `for` `(` `int` `i = 0; i < X; i++) ` ` ` `mat[edges[i][0]][edges[i][1]] = ` `true` `; ` ` ` ` ` `// check for all intermediate vertex ` ` ` `for` `(` `int` `k = 0; k < V; k++) { ` ` ` `for` `(` `int` `i = 0; i < V; i++) { ` ` ` `for` `(` `int` `j = 0; j < V; j++) { ` ` ` ` ` `mat[i][j] = mat[i][j] ` ` ` `|| mat[i][k] ` ` ` `&& mat[k][j]; ` ` ` `} ` ` ` `} ` ` ` `} ` ` ` ` ` `// if vertex is invalid ` ` ` `if` `(u >= V || v >= V) { ` ` ` `return` `false` `; ` ` ` `} ` ` ` ` ` `// if there is a path ` ` ` `if` `(mat[u][v]) ` ` ` `return` `true` `; ` ` ` `return` `false` `; ` `} ` ` ` `// Driver function ` `int` `main() ` `{ ` ` ` `int` `V = 4; ` ` ` `int` `edges[X][Z] ` ` ` `= { { 0, 2 }, { 0, 1 }, ` ` ` `{ 1, 2 }, { 2, 3 }, ` ` ` `{ 2, 0 }, { 3, 3 } }; ` ` ` `int` `u = 1, v = 3; ` ` ` ` ` `if` `(existPath(V, edges, u, v)) ` ` ` `cout << ` `"Yes\n"` `; ` ` ` `else` ` ` `cout << ` `"No\n"` `; ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to find if there is a path ` `// between two vertices in a directed graph ` `// using Dynamic Programming ` `import` `java.util.*; ` ` ` `class` `GFG{ ` ` ` `static` `final` `int` `X = ` `6` `; ` `static` `final` `int` `Z = ` `2` `; ` ` ` `// Function to find if there is a ` `// path between two vertices in a ` `// directed graph ` `static` `boolean` `existPath(` `int` `V, ` `int` `edges[][], ` ` ` `int` `u, ` `int` `v) ` `{ ` ` ` ` ` `// mat matrix ` ` ` `boolean` `[][]mat = ` `new` `boolean` `[V][V]; ` ` ` ` ` `// set mat[i][j]=true if there is ` ` ` `// edge between i to j ` ` ` `for` `(` `int` `i = ` `0` `; i < X; i++) ` ` ` `mat[edges[i][` `0` `]][edges[i][` `1` `]] = ` `true` `; ` ` ` ` ` `// Check for all intermediate vertex ` ` ` `for` `(` `int` `k = ` `0` `; k < V; k++) ` ` ` `{ ` ` ` `for` `(` `int` `i = ` `0` `; i < V; i++) ` ` ` `{ ` ` ` `for` `(` `int` `j = ` `0` `; j < V; j++) ` ` ` `{ ` ` ` `mat[i][j] = mat[i][j] || ` ` ` `mat[i][k] && ` ` ` `mat[k][j]; ` ` ` `} ` ` ` `} ` ` ` `} ` ` ` ` ` `// If vertex is invalid ` ` ` `if` `(u >= V || v >= V) ` ` ` `{ ` ` ` `return` `false` `; ` ` ` `} ` ` ` ` ` `// If there is a path ` ` ` `if` `(mat[u][v]) ` ` ` `return` `true` `; ` ` ` `return` `false` `; ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` ` ` `int` `V = ` `4` `; ` ` ` `int` `edges[][] = { { ` `0` `, ` `2` `}, { ` `0` `, ` `1` `}, ` ` ` `{ ` `1` `, ` `2` `}, { ` `2` `, ` `3` `}, ` ` ` `{ ` `2` `, ` `0` `}, { ` `3` `, ` `3` `} }; ` ` ` `int` `u = ` `1` `, v = ` `3` `; ` ` ` ` ` `if` `(existPath(V, edges, u, v)) ` ` ` `System.out.print(` `"Yes\n"` `); ` ` ` `else` ` ` `System.out.print(` `"No\n"` `); ` `} ` `} ` ` ` `// This code is contributed by Princi Singh ` |

*chevron_right*

*filter_none*

**Output:**

Yes

**Time Complexity :** O ( V^{ 3})

**Auxiliary Space :** O ( V^{ 2})

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Find if there is a path between two vertices in a directed graph
- Find if there is a path between two vertices in an undirected graph
- Convert the undirected graph into directed graph such that there is no path of length greater than 1
- Path with minimum XOR sum of edges in a directed graph
- Shortest Path in Directed Acyclic Graph
- Longest Path in a Directed Acyclic Graph | Set 2
- Longest Path in a Directed Acyclic Graph
- Find K vertices in the graph which are connected to at least one of remaining vertices
- Shortest path in a directed graph by Dijkstra’s algorithm
- Shortest path with exactly k edges in a directed and weighted graph
- Shortest path with exactly k edges in a directed and weighted graph | Set 2
- Minimum Cost Path in a directed graph via given set of intermediate nodes
- Longest path in a directed Acyclic graph | Dynamic Programming
- Minimum Cost of Simple Path between two nodes in a Directed and Weighted Graph
- Find dependencies of each Vertex in a Directed Graph
- Maximize the number of uncolored vertices appearing along the path from root vertex and the colored vertices
- Find the number of paths of length K in a directed graph
- Find two disjoint good sets of vertices in a given graph
- Convert undirected connected graph to strongly connected directed graph
- Clone a Directed Acyclic Graph

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.