This C++ Program checks whether Directed Graph is Connected using DFS.
Here is source code of the C++ Program to check whether Directed Graph is Connected using DFS. The C++ program is successfully compiled and run on a Linux system. The program output is also shown below.
/*
* C++ Program to Check whether Directed Graph is Connected using DFS
*/
#include <iostream>
#include <list>
#include <stack>
using namespace std;
/*
* Class Declaration
*/
class Graph
{
private:
int V;
list<int> *adj;
void DFSUtil(int v, bool visited[]);
public:
Graph(int V)
{
this->V = V;
adj = new list<int>[V];
}
~Graph()
{
delete [] adj;
}
void addEdge(int v, int w);
bool isConnected();
Graph getTranspose();
};
/*
* A recursive function to print DFS starting from v
*/
void Graph::DFSUtil(int v, bool visited[])
{
visited[v] = true;
list<int>::iterator i;
for (i = adj[v].begin(); i != adj[v].end(); ++i)
if (!visited[*i])
DFSUtil(*i, visited);
}
/*
* Function that returns reverse (or transpose) of this graph
*/
Graph Graph::getTranspose()
{
Graph g(V);
for (int v = 0; v < V; v++)
{
list<int>::iterator i;
for(i = adj[v].begin(); i != adj[v].end(); ++i)
{
g.adj[*i].push_back(v);
}
}
return g;
}
/*
* Add Edge to connect v and w
*/
void Graph::addEdge(int v, int w)
{
adj[v].push_back(w);
}
/*
* Check if Graph is Connected
*/
bool Graph::isConnected()
{
bool visited[V];
for (int i = 0; i < V; i++)
visited[i] = false;
DFSUtil(0, visited);
for (int i = 0; i < V; i++)
if (visited[i] == false)
return false;
Graph gr = getTranspose();
for(int i = 0; i < V; i++)
visited[i] = false;
gr.DFSUtil(0, visited);
for (int i = 0; i < V; i++)
if (visited[i] == false)
return false;
return true;
}
/*
* Main Contains Menu
*/
int main()
{
Graph g1(5);
g1.addEdge(0, 1);
g1.addEdge(1, 2);
g1.addEdge(2, 3);
g1.addEdge(3, 0);
g1.addEdge(2, 4);
g1.addEdge(4, 2);
if (g1.isConnected())
cout<<"The Graph is Conneted"<<endl;
else
cout<<"The Graph is not Connected"<<endl;
Graph g2(4);
g2.addEdge(0, 1);
g2.addEdge(1, 2);
g2.addEdge(2, 3);
if (g2.isConnected())
cout<<"The Graph is Connected"<<endl;
else
cout<<"The Graph is not Connected"<<endl;
return 0;
}
$ g++ directed_connected_dfs.cpp $ a.out The Graph is Connected The Graph is Not Connected ------------------ (program exited with code: 0) Press return to continue
Sanfoundry Global Education & Learning Series – 1000 C++ Programs.
advertisement
advertisement
If you wish to look at all C++ Programming examples, go to C++ Programs.
Related Posts:
- Apply for C++ Internship
- Practice Programming MCQs
- Check Computer Science Books
- Check Programming Books
- Practice Computer Science MCQs