Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- void DFS_Visit(int u);
- void DFS_Visit2(int u);
- int g[6][6],gt[6][6],color[6],prev[6],d[6], f[6],t,flage = 0,cu[6],cv[6],ts[6],m=0,n=0,dfs2[6];
- char name[9][100] = {"Undershort","Pants","Belt","Shirt","Tie","Jacket","Socks","Shoes","Watch"};
- void DFS(int g[6][6])
- {
- int i,j,s=0,u,v;
- for(i=0; i<6; i++)
- {
- color[i] = 0;
- prev[i] = 0;
- d[i] = 999999;
- f[i] = 999999;
- dfs2[i] = 999999;
- }
- t = 0;
- color[s] = 0;
- prev[s] = 0;
- d[s] = 0;
- for(j=0; j<6; j++)
- {
- if(color[j]==0)
- {
- DFS_Visit(j);
- }
- }
- printf("\n\n Sorted Nodes:\t\t");
- for(j=0; j<6; j++)
- {
- if(color[j]==2)
- {
- DFS_Visit2(ts[j]);
- printf("SCC:\n");
- for(i=0; i<6; i++)
- {
- printf("%d",dfs2[i]);
- }
- for(i=0; i<6; i++)
- {
- dfs2[i] = 9999;
- }
- }
- printf("%d\t",ts[j]);
- }
- printf("\n\n Discovery Time:\t");
- for(i=0; i<6; i++)
- printf("%d\t",d[i]);
- printf("\n\n Finishing Time:\t");
- for(i=0; i<6; i++)
- printf("%d\t",f[i]);
- printf("\n\n Color:\t\t\t");
- for(i=0; i<6; i++)
- printf("%d\t",color[i]);
- printf("\n\n Topological List:\t");
- for(i=5; i>=0; i--)
- printf("%d\t",ts[i]);
- // if(flage==1)
- // {
- // printf("\n\n This Graph is cyclic\n The Cyclic Edges are:\n");
- // for(i=0;i<6;i++)
- // {
- // printf(" %d - %d\t",cu[i],cv[i]);
- // }
- //
- // }
- //
- // else printf("\n This Graph is not cycle");
- }
- void DFS_Visit(int u)
- {
- int i,k = 0, l= 0;
- color[u] = 1;
- t = t+1;
- d[u] = t;
- for(i=0; i<=5; i++)
- {
- if(color[i]==0 && g[u][i] !=0)
- {
- prev[i] = u;
- DFS_Visit(i);
- }
- else if(color[i]==1 && g[u][i] !=0)
- {
- flage = 1;
- cu[k] = u;
- cv[l++] = i;
- //printf("cycle edge %d\n", i);
- k++;
- l++;
- }
- }
- color[u] = 2;
- t = t+1;
- f[u] = t;
- ts[m] = u;
- m++;
- }
- void DFS_Visit2(int u)
- {
- int i,k = 0, l= 0;
- color[u] = 1;
- t = t+1;
- d[u] = t;
- for(i=0; i<=5; i++)
- {
- if(color[i]==0 && g[u][i] !=0)
- {
- prev[i] = u;
- DFS_Visit2(i);
- }
- else if(color[i]==1 && g[u][i] !=0)
- {
- flage = 1;
- cu[k] = u;
- cv[l++] = i;
- //printf("cycle edge %d\n", i);
- k++;
- l++;
- }
- }
- color[u] = 2;
- t = t+1;
- f[u] = t;
- ts[m] = u;
- dfs2[n] = u;
- m++;
- n++;
- }
- int main()
- {
- int i,j;
- for(i=0; i<6; i++)
- {
- for(j=0; j<6; j++)
- {
- g[i][j] = 0;
- }
- }
- // Graph initialize
- g[0][2] = 1;
- g[1][0] = 1;
- g[1][3] = 1;
- g[2][1] = 1;
- g[2][3] = 1;
- g[2][5] = 1;
- g[3][4] = 1;
- g[4][3] = 1;
- g[5][5] = 1;
- for(i=0; i<6; i++)
- {
- for(j=0; j<6; j++)
- {
- printf(" %d ",g[i][j]);
- gt[i][j] = g[j][i];
- }
- printf("\n");
- }
- //Transpose graph
- printf("\nTranspose graph:\n\n");
- for(i=0; i<6; i++)
- {
- for(j=0; j<6; j++)
- {
- printf(" %d ",gt[i][j]);
- }
- printf("\n");
- }
- DFS(g);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement