void BFS(int v) { int i; insert_queue(v); state[v] = waiting; while(!isEmpty_queue()) { v = delete_queue(); printf("Vertex %d visited\n",v); state[v] = visited; for(i=0; i<n; i++) { /* Check for adjacent unvisited vertices */ if(adj[v][i] == 1 && state[i] == initial) { insert_queue(i); state[i] = waiting; printf("-----Tree edge - (%d,%d)\n", v, i); } } } printf("\n"); }/*End of BFS()*/
void display_queue() { int i; printf("Queue : "); if(isEmpty_queue()) { printf("Empty\n"); return; } for(i=front; i<=rear; i++) printf("%d ",queue[i]); printf("\n\n"); }/*End of display_queue()*/
main() { int i,v,count,topo_order[MAX],indeg[MAX]; create_graph(); /*Find the indegree of each vertex*/ for(i=0;i<n;i++) { indeg[i] = indegree(i); if( indeg[i] == 0 ) insert_queue(i); } count = 0; while( !isEmpty_queue( ) && count < n ) { v = delete_queue(); topo_order[++count] = v; /*Add vertex v to topo_order array*/ /*Delete all edges going fron vertex v */ for(i=0; i<n; i++) { if(adj[v][i] == 1) { adj[v][i] = 0; indeg[i] = indeg[i]-1; if(indeg[i] == 0) insert_queue(i); } } } if( count < n ) { printf("No topological ordering possible, graph contains cycle\n"); exit(1); } printf("Vertices in topological order are :\n"); for(i=1; i<=count; i++) printf( "%d ",topo_order[i] ); printf("\n"); }/*End of main()*/
void BFS(int v) { int i; insert_queue(v); state[v]=waiting; while(!isEmpty_queue()) { v=delete_queue(); printf("%d",v); state[v]=visited; for(i=0;i<n;i++) { if(adj[v][i]==1 && state[i]==initial) { insert_queue(i); state[i]=waiting; } } printf("---"); } printf("\n"); }
main() { int i,v; int topo_order[MAX],indeg[MAX]; int count; int j; create_graph(); /*Find the indegree of each vertex*/ for(i=0; i<n; i++) { indeg[i] = indegree(i); if( indeg[i] == 0 ) insert_queue(i); } for(j=0; j<n; j++) printf("In(%d) = %d\t",j, indeg[j]); printf("\n"); display_queue(); count = 0; while( !isEmpty_queue() && count<n ) { v = delete_queue(); printf("Delete %d and edges going from it\n",v); topo_order[++count] = v; /*Add vertex v to topo_order array*/ /*Delete all edges going fron vertex v */ for(i=0; i<n; i++) { if(adj[v][i]==1) { adj[v][i] = 0; indeg[i] = indeg[i]-1; if(indeg[i] == 0) { printf("Now vertex %d has zero indegree so insert it in the queue\n",i); insert_queue(i); } } } for(j=0; j<n; j++) { if(indeg[j]!=0) printf("In(%d) = %d\t",j, indeg[j]); } printf("\n"); display_queue(); STOP; } printf("count = %d\n",count); if( count < n ) { printf("No topological ordering possible, graph contains cycle\n"); exit(1); } printf("Vertices in topological order are :\n"); for(i=1; i<=count; i++) printf( "%d ",topo_order[i] ); printf("\n"); }/*End of main()*/