#include<stdio.h>
#include<stdlib.h>
struct vertex
{
char color ;
int d ;
} ;
int size;
void push( int v[ ] , int * f , int * r, int d)
{
if ( * r == size )
{
printf ( "The Queue is full\n " ) ; }
else if ( * f == - 1 )
{
* f = 1 ;
* r = 1 ;
v[ * r] = d;
}
else
{
* r = * r++;
v[ * f] = d;
}
}
int pop( int v[ ] , int * f, int * r)
{
int x;
if ( * f == - 1 )
{
return - 1 ;
}
else
{
x = v[ * f] ;
* f++;
return x ;
}
}
void BFS( int ar[ size+ 1 ] [ size+ 1 ] )
{
int i;
struct vertex v[ size+ 1 ] ;
for ( i= 1 ; i<= size; i++ )
{
v[ i] .color = 'w' ;
v[ i] .d = 0 ;
}
int visted[ size+ 1 ] ;
int x;
int front=- 1 , rear=- 1 ;
v[ 1 ] .color = 'g' ;
v[ 1 ] .d = 0 ;
push( visted,& front,& rear, 1 ) ;
while ( front != - 1 && front < rear)
{
int x = pop( visted,& front,& rear) ;
for ( i = 1 ; i<= size; i++ )
{
if ( ar[ x] [ i] == 1 && v[ i] .color == 'w' )
{
v[ i] .color = 'g' ;
v[ i] .d = v[ x] .d + 1 ;
}
push( visted,& front,& rear, i) ;
}
v[ x] .color = 'b' ;
}
}
int main( )
{
int a, b, i, j;
printf ( "Enter Number of vertex : " ) ; int ar[ size+ 1 ] [ size+ 1 ] ;
for ( i= 1 ; i<= size; i++ )
{
for ( j= 1 ; j<= size; j++ )
{
ar[ i] [ j] = 0 ;
}
}
for ( i = 1 ; i<= size; i++ )
{
printf ( "Enter No. of vetex that are adjecent to %d :" , i
) ; printf ( "Enter the vertices\n " ) ; for ( j = 1 ; j<= a; j++ )
{
ar[ j] [ b] = 1 ;
}
}
printf ( "The BSF Result is:\n " ) ; BSF( ar) ;
return 0 ;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CgpzdHJ1Y3QgdmVydGV4CnsKCWNoYXIgY29sb3IgOwoJaW50IGQgOwp9OwppbnQgc2l6ZTsKCnZvaWQgcHVzaChpbnQgdltdLGludCAqZiAsaW50ICpyLGludCBkKQp7CglpZigqciA9PSBzaXplICkKCXsKCQlwcmludGYoIlRoZSBRdWV1ZSBpcyBmdWxsXG4iKTsKCX0KCWVsc2UgaWYoKmYgPT0gLTEpCgl7CgkJKmYgPTE7CgkJKnIgPSAxOwoJCXZbKnJdID0gZDsKCX0KCWVsc2UKCXsKCQkqciA9ICpyKys7CgkJdlsqZl0gPSBkOwkKCX0KfQoKaW50IHBvcChpbnQgdltdLCBpbnQgKmYsaW50ICpyKQp7CglpbnQgeDsKCWlmKCpmID09IC0xKQoJewoJCXJldHVybiAtMTsKCX0KCWVsc2UKCXsKCQl4ID0gdlsqZl07CgkJKmYrKzsKCQlyZXR1cm4geCA7CQoJfQp9Cgp2b2lkIEJGUyhpbnQgYXJbc2l6ZSsxXVtzaXplKzFdKQp7CglpbnQgaTsKCXN0cnVjdCB2ZXJ0ZXggdltzaXplKzFdOwoJZm9yKGk9MTtpPD1zaXplO2krKykKCXsKCQl2W2ldLmNvbG9yID0gJ3cnOwoJCXZbaV0uZCA9IDA7Cgl9CglpbnQgdmlzdGVkW3NpemUrMV07CglpbnQgeDsKCWludCBmcm9udD0tMSxyZWFyPS0xOwoJdlsxXS5jb2xvciA9ICdnJzsKCXZbMV0uZCA9IDA7CglwdXNoKHZpc3RlZCwmZnJvbnQsJnJlYXIsMSk7Cgl3aGlsZShmcm9udCAhPSAtMSAmJiBmcm9udCA8IHJlYXIpCgl7CgkJaW50IHggPSBwb3AodmlzdGVkLCZmcm9udCwmcmVhcik7CgkJcHJpbnRmKCIlZCBcdCIseCk7CgkJZm9yKGkgPTE7aTw9c2l6ZTtpKyspCgkJewoJCQlpZihhclt4XVtpXT09MSAmJiB2W2ldLmNvbG9yPT0ndycpCgkJCXsKCQkJCXZbaV0uY29sb3IgPSAnZyc7CgkJCQl2W2ldLmQgPSB2W3hdLmQgKyAxOwoJCQl9CgkJCXB1c2godmlzdGVkLCZmcm9udCwmcmVhcixpKTsKCQl9CgkJdlt4XS5jb2xvciA9ICdiJzsKCX0KfQoKaW50IG1haW4oKQp7CglpbnQgYSxiLGksajsKCXByaW50ZigiRW50ZXIgTnVtYmVyIG9mIHZlcnRleCA6ICIpOwoJc2NhbmYoIiVkIFxuIiwmc2l6ZSk7CglpbnQgYXJbc2l6ZSsxXVtzaXplKzFdOwoJZm9yKGk9MTtpPD1zaXplO2krKykKCXsKCQlmb3Ioaj0xO2o8PXNpemU7aisrKQoJCXsKCQkJYXJbaV1bal09MDsKCQl9Cgl9Cglmb3IoaSA9MTtpPD1zaXplO2krKykKCXsKCQlwcmludGYoCSJFbnRlciBOby4gb2YgdmV0ZXggdGhhdCBhcmUgYWRqZWNlbnQgdG8gJWQgOiIsaSk7CgkJc2NhbmYoIiVkIFxuIiwmYSk7CgkJcHJpbnRmKCJFbnRlciB0aGUgdmVydGljZXNcbiIpOwoJCWZvcihqID0gMTtqPD1hO2orKykKCQl7CgkJCXNjYW5mKCIlZCIsJmIpOwoJCQlhcltqXVtiXSA9IDE7CgkJfQoJfQoJcHJpbnRmKCJUaGUgQlNGIFJlc3VsdCBpczpcbiIpOwoJQlNGKGFyKTsKCQoJcmV0dXJuIDA7Cn0=