#include<stdio.h>
#include<stdlib.h>
#define max 20

void BFS(int adj[20][20],int n,int u);
void addq(int x);
int qempty();
int delq();

int front=-1,rear=-1;
int q[20];

void main()
{
int adj[20][20],visited[10],n,u,v,i,j;

printf("Enter no of vertices:");
scanf("%d",&n);

for(i=1; i<=n; i++)
{ for(j=1; j<=n; j++)
{
adj[i][j]=0;
}
}
printf("Enter edge:");
scanf("%d%d",&u,&v);
while(u!=0)
{
adj[u][v]=1;
adj[v][u]=1;
printf("Enter another edge:");
scanf("%d%d",&u,&v);
}
printf("Enter starting vertex:");
scanf("%d",&u);
BFS(adj,n,u);
}

void BFS(int adj[20][20],int n,int u)
{
int visited[10],v,i;
for(i=1; i<=n; i++)
{
visited[i]=0;
}

addq(u);

while(!qempty())
{
u=delq();
visited[u]=1;
printf("%d ",u);
for(v=1; v<=n; v++)
{
if(adj[u][v]==1&&visited[v]==0)
{
addq(v);
visited[v]=1;
}
}
}
}


int qempty()
{ if(front==rear)
return 1;
else
return 0;
}

int delq()
{
int x;
if(front==rear)
{
printf("Queue is empty\n");
exit(0);
}
else
{
front=front+1;
x=q[front];
return x;
}
}

void addq(int x)
{
if(rear==max-1)
printf("Queue is full\n");
else
{
rear=rear+1;
q[rear]=x;
}
}
     
           
Note: Need to be arranged in compiler after copied
   

 OutPut:

Enter no of vertices:6 Enter edge:1 2 Enter another edge:1 3 Enter another edge:2 4 Enter another edge:2 5 Enter another edge:3 5 Enter another edge:4 5 Enter another edge:4 6 Enter another edge:5 6 Enter another edge:0 0 Enter starting vertex:1 1 2 3 4 5