BFS and DFS
/* B.F.S AND D.F.S */
#include<stdio.h>
int q[ 20 ], top = -1, front = -1, rear = -1, a[ 20 ][ 20 ], vis[ 20 ], stack[ 20 ];
int delete();
void add ( int item );
void bfs( int s, int n );
void dfs( int s, int n );
void push( int item );
int pop();
main()
{
int n, i, s, ch, j;
char c, dummy;
printf( "ENTER THE NUMBER VERTICES " );
scanf( "%d", &n );
for ( i = 1;i <= n;i++ )
{
for ( j = 1;j <= n;j++ )
{
printf( "ENTER 1 IF %d HAS A NODE WITH %d ELSE 0 ", i, j );
scanf( "%d", &a[ i ][ j ] );
}
}
printf( "THE ADJACENCY MATRIX IS\n" );
for ( i = 1;i <= n;i++ )
{
for ( j = 1;j <= n;j++ )
{
printf( " %d", a[ i ][ j ] );
}
printf( "\n" );
}
do
{
for ( i = 1;i <= n;i++ )
vis[ i ] = 0;
printf( "\nMENU" );
printf( "\n1.B.F.S" );
printf( "\n2.D.F.S" );
printf( "\nENTER YOUR CHOICE" );
scanf( "%d", &ch );
printf( "ENTER THE SOURCE VERTEX :" );
scanf( "%d", &s );
switch ( ch )
{
case 1:
bfs( s, n );
break;
case 2:
dfs( s, n );
break;
}
printf( "DO U WANT TO CONTINUE(Y/N) ? " );
scanf( "%c", &dummy );
scanf( "%c", &c );
}
while ( ( c == 'y' ) || ( c == 'Y' ) );
}
void bfs( int s, int n )
{
int p, i;
add
( s );
vis[ s ] = 1;
p = delete();
if ( p != 0 )
printf( " %d", p );
while ( p != 0 )
{
for ( i = 1;i <= n;i++ )
if ( ( a[ p ][ i ] != 0 ) && ( vis[ i ] == 0 ) )
{
add
( i );
vis[ i ] = 1;
}
p = delete();
if ( p != 0 )
printf( " %d ", p );
}
for ( i = 1;i <= n;i++ )
if ( vis[ i ] == 0 )
bfs( i, n );
}
void add
( int item )
{
if ( rear == 19 )
printf( "QUEUE FULL" );
else
{
if ( rear == -1 )
{
q[ ++rear ] = item;
front++;
}
else
q[ ++rear ] = item;
}
}
int delete()
{
int k;
if ( ( front > rear ) || ( front == -1 ) )
return ( 0 );
else
{
k = q[ front++ ];
return ( k );
}
}
void dfs( int s, int n )
{
int i, k;
push( s );
vis[ s ] = 1;
k = pop();
if ( k != 0 )
printf( " %d ", k );
while ( k != 0 )
{
for ( i = 1;i <= n;i++ )
if ( ( a[ k ][ i ] != 0 ) && ( vis[ i ] == 0 ) )
{
push( i );
vis[ i ] = 1;
}
k = pop();
if ( k != 0 )
printf( " %d ", k );
}
for ( i = 1;i <= n;i++ )
if ( vis[ i ] == 0 )
dfs( i, n );
}
void push( int item )
{
if ( top == 19 )
printf( "Stack overflow " );
else
stack[ ++top ] = item;
}
int pop()
{
int k;
if ( top == -1 )
return ( 0 );
else
{
k = stack[ top-- ];
return ( k );
}
}
BFS and DFS, Related posts:
- queue operations using linked list
- Implementation of stack using linked list
- implementation of stack using array
- infix expression evaluation


gr8 work…. may ur work continue lik this 4ever….
thanks i need it desperately!!!!
thanks a lot
this program gives wrong output!!!!!!
thanx a lot!!
Why is it that no one ever comment the code?!??
instead of 2 delete(/pop) operations, we could have just 1, right inside the loop (amongst the first statements!!)
great work
i find this code useful
it is really very tough to read this code. please improve your skills. use better variable names and please write explanatory comments.
dfs is not work for this graph i show a graph in matrix level
0 1 1 0 0 1
1 0 0 1 1 0
1 0 0 1 1 0
0 1 1 0 0 1
0 1 1 0 0 1
1 0 0 1 1 0
dear please help me for given matrix