Exemple #1
0
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()*/
Exemple #3
0
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()*/