# Check if a directed graph is connected or not

Given a directed graph. The task is to check if the given graph is connected or not.

**Examples:**

Input:

Output:Yes

Input:

Output:No

**Approach:**

- Take two bool arrays
**vis1**and**vis2**of size**N**(number of nodes of a graph) and keep false in all indexes. - Start at a random vertex
**v**of the graph G, and run a DFS(G, v). - Make all visited vertices
**v**as**vis1[v] = true**. - Now reverse the direction of all the edges.
- Start DFS at the vertex which was chosen at step 2.
- Make all visited vertices
**v**as**vis2[v] = true**. - If any vertex
**v**has**vis1[v] = false**and**vis2[v] = false**then the graph is not connected.

Below is the implementation of the above approach:

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` `#define N 100000 ` ` ` `// To keep correct and reverse direction ` `vector<` `int` `> gr1[N], gr2[N]; ` ` ` `bool` `vis1[N], vis2[N]; ` ` ` `// Function to add edges ` `void` `Add_edge(` `int` `u, ` `int` `v) ` `{ ` ` ` `gr1[u].push_back(v); ` ` ` `gr2[v].push_back(u); ` `} ` ` ` `// DFS function ` `void` `dfs1(` `int` `x) ` `{ ` ` ` `vis1[x] = ` `true` `; ` ` ` ` ` `for` `(` `auto` `i : gr1[x]) ` ` ` `if` `(!vis1[i]) ` ` ` `dfs1(i); ` `} ` ` ` `// DFS function ` `void` `dfs2(` `int` `x) ` `{ ` ` ` `vis2[x] = ` `true` `; ` ` ` ` ` `for` `(` `auto` `i : gr2[x]) ` ` ` `if` `(!vis2[i]) ` ` ` `dfs2(i); ` `} ` ` ` `bool` `Is_Connected(` `int` `n) ` `{ ` ` ` `// Call for correct direction ` ` ` `memset` `(vis1, ` `false` `, ` `sizeof` `vis1); ` ` ` `dfs1(1); ` ` ` ` ` `// Call for reverse direction ` ` ` `memset` `(vis2, ` `false` `, ` `sizeof` `vis2); ` ` ` `dfs2(1); ` ` ` ` ` `for` `(` `int` `i = 1; i <= n; i++) { ` ` ` ` ` `// If any vertex it not visited in any direction ` ` ` `// Then graph is not connected ` ` ` `if` `(!vis1[i] and !vis2[i]) ` ` ` `return` `false` `; ` ` ` `} ` ` ` ` ` `// If graph is connected ` ` ` `return` `true` `; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `n = 4; ` ` ` ` ` `// Add edges ` ` ` `Add_edge(1, 2); ` ` ` `Add_edge(1, 3); ` ` ` `Add_edge(2, 3); ` ` ` `Add_edge(3, 4); ` ` ` ` ` `// Function call ` ` ` `if` `(Is_Connected(n)) ` ` ` `cout << ` `"Yes"` `; ` ` ` `else` ` ` `cout << ` `"No"` `; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

Yes

## Recommended Posts:

- Check if a given directed graph is strongly connected | Set 2 (Kosaraju using BFS)
- Check if a graph is strongly connected | Set 1 (Kosaraju using DFS)
- Convert the undirected graph into directed graph such that there is no path of length greater than 1
- Connected Components in an undirected graph
- Detect Cycle in a Directed Graph using BFS
- Euler Circuit in a Directed Graph
- Hierholzer's Algorithm for directed graph
- Clone a Directed Acyclic Graph
- Detect Cycle in a Directed Graph
- Cycles of length n in an undirected and connected graph
- All vertex pairs connected with exactly k edges in a graph
- Find if there is a path between two vertices in a directed graph
- Shortest Path in Directed Acyclic Graph
- Longest Path in a Directed Acyclic Graph | Set 2
- Detect Cycle in a directed graph using colors

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.