# include # include #define NIL -1 enum c{white=-5,gray,black}; int n; int d[6],f[6],a[6],time; int graph[6][6]={{0,1,0,0,0,1},{0,0,0,0,1,0},{0,0,0,1,1,0},{0,0,0,0,0,0},{0,0,0,0,0,0},{0,1,0,0,1,0}}; int color[6],pred[6]; int gt[6][6],k=6; void DFS_VISIT(int u) { int v; color[u]=gray; time++; d[u]=time; for(v=0;v<6;v++) { if(graph[u][v]!=0) { if(color[v]==white) { pred[v]=u; DFS_VISIT(v); } } } color[u]=black; printf("%4d",u); f[u]=++time; a[k-1]=u; k--; } void transpose()// Transpose Graph { int i,j; for(i=0;i<6;i++) { for(j=0;j<6;j++) { gt[i][j]=graph[j][i]; } } } void dfs2(int u) // DFS of Transposed Graph, u=a[i], Parameter is nodes finished in decr order { int j; color[u]=black; for(j=0;j<6;j++) { if(gt[u][j]!=0) { if(color[j]==white) dfs2(j); } } printf("%d\t",u); } int main() { int i,j,count=0;; time=0; for(i=0;i<6;i++) // Initialize { color[i]=white; pred[i]=NIL; } printf("\nThe DFS traversal of the graph as:\n\n"); for(i=0;i<6;i++) { if(color[i]==white) DFS_VISIT(i); // call DFS_Visit(u) } printf("\n\n\nThe discovery & finishing time of the vertices are:\n\n\n"); for(i=0;i<6;i++) { printf("For vertex %d : \td[%d]=%d f[%d]=%d\n",i,i,d[i],i,f[i]); } transpose(); for(i=0;i<6;i++) // initialize for SCC { color[a[i]]=white; } for(i=0;i<6;i++) { if(color[a[i]]==white) { count++; printf("\n\nStrongly Connected Component %d --> ",count); dfs2(a[i]); } } getch(); return 0; }