Implementation of Warshal’s Algorithm in C to find Path Matrices of a Graph
July 3, 2020
Warshal’s Algorithm can be applied to find the Path Matrices and this the TRANSITIVE CLOSURE of a graph given its adj matrix. Warshal’s algorithm is based on the fact that the Pathk+1[i][j] is TRUE if and only if any one of the following conditions is true –
1) Pathk[i][j] == TRUE
2) Pathk[i][k+1] == TRUE && Pathk[k+1][j] == TRUE
i.e. Pathk+1[i][j] == Pathk[i][j] || Pathk[i][k+1] && Pathk[k+1][j] –
………. where Pathk+1[i][j] gives the path matrix for (k+1) nodes. The algorithm could be implemented as a C routine as shown bellow –
/* Routine to find Path Matrices and thus transitive closure of a graph given its adjacency matrix*/
void transclose(int adj[][MAXNODES], int path[][MAX]){
int i, j, k;
for(i=0; i< MAXNODES; i++) {
for(j=0; j< MAXNODES; j++) {
path[i][j] = adj[i][j]; /* Path Matrix is first initialized to adj matrix
}
}
for(k=0; k< MAXNODES; k++) {
for(i=0; i< MAXNODES; i++) {
if( path[i][k] == TRUE) {
for(j = 0; j < MAXNODES; j++){
path[i][j] = adj[i][j] || path[k][j]
}
}
}
printf("Transclose is > ", path[i][j]);
}
}