# C++ Program to Find the Transitive Closure of a Given Graph G

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

If a directed graph is given, determine if a vertex j is reachable from another vertex i for all vertex pairs (i, j) in the given graph. Reachable mean that there is a path from vertex i to j. This reach-ability matrix is called transitive closure of a graph. Warshall algorithm is commonly used to find the Transitive Closure of a Given Graph G. Here is a C++ program to implement this algorithm.

## Algorithm

Begin
1. Take maximum number of nodes as input.
2. For Label the nodes as a, b, c…..
3. To check if there any edge present between the nodes
construct a for loop:
// ASCII code of a is 97
for i = 97 to (97 + n_nodes)-1
for j = 97 to (97 + n_nodes)-1
If edge is present do,
adj[i - 97][j - 97] = 1
else
adj[i - 97][j - 97] = 0
End loop
End loop.
4. To print the transitive closure of graph:
for i = 0 to n_ nodes-1
c = 97 + i
End loop.
for i = 0 to n_nodes-1
c = 97 + i
for j = 0 to n_nodes-1
Print adj[I][j]
End loop
End loop
End

## Example

#include<iostream>
using namespace std;
const int n_nodes = 20;
int main() {
int n_nodes, k, n;
char i, j, res, c;
int adj[10][10], path[10][10];
cout << "\tMaximum number of nodes in the graph :";
cin >> n;
n_nodes = n;
cout << "Enter 'y'for 'YES' and 'n' for 'NO' ";
for (i = 97; i < 97 + n_nodes; i++)
for (j = 97; j < 97 + n_nodes; j++) {
cout << "\tIs there an edge from " << i << " to " << j << " ? ";
cin >> res;
if (res == 'y')
adj[i - 97][j - 97] = 1;
else
adj[i - 97][j - 97] = 0;
}
cout << "Transitive Closure of the Graph:";
cout << "\t\t\t ";
for (i = 0; i < n_nodes; i++) {
c = 97 + i;
cout << c << " ";
}
cout << "";
for (int i = 0; i < n_nodes; i++) {
c = 97 + i;
cout << "\t\t\t" << c << " ";
for (int j = 0; j < n_nodes; j++)
cout << adj[i][j] << " ";
cout << "";
}
return 0;
}

## Output

Maximum number of nodes in the graph :4
Enter 'y'for 'YES' and 'n' for 'NO'
Is there an edge from a to a ? y
Is there an edge from a to b ?y
Is there an edge from a to c ? n
Is there an edge from a to d ? n
Is there an edge from b to a ? y
Is there an edge from b to b ? n
Is there an edge from b to c ? y
Is there an edge from b to d ? n
Is there an edge from c to a ? y
Is there an edge from c to b ? n
Is there an edge from c to c ? n
Is there an edge from c to d ? n
Is there an edge from d to a ? y
Is there an edge from d to b ? n
Is there an edge from d to c ? y
Is there an edge from d to d ? n
Transitive Closure of the Graph:
a b c d
a 1 1 0 0
b 1 0 1 0
c 1 0 0 0
d 1 0 1 0
Updated on 30-Jul-2019 22:30:25

Advertisements