#include<stdio.h>
#include<stdlib.h>
#define MAX 100
int queue[MAX],front=-1,rear=-1;
int visited[MAX];
void enqueue(int vertex)
{
    if(rear==MAX-1)
    printf("Queue overflow\n");
    else
    {
        if(front==-1)
        front=0;
        queue[++rear]=vertex;
    }
}
int dequeue()
{
    if(front==-1||front>rear)
    return -1;
    return queue[front++];
}
void BFS(int adj[MAX][MAX],int vertices,int start)
{
    int i,current;
    for(int i=0;i<vertices;i++)
    visited[i]=0;
    enqueue(start);
    visited[start]=1;
    printf("BFS traversal starting from vertex:\n");
    while(front<rear)
    {
        current=dequeue();
        printf("%d\n",current);
        for(int i=0;i<vertices;i++)
        {
            if(adj[current][i]==1&&!visited[i])
            {
                enqueue(i);
                visited(i)=1;
            }
        }
    }
}
int main()
{
  int vertices,edges,i,j,start;
  int adj[MAX][MAX]={0};
  int src,dest;
  printf("Enter the number of vertices:");
  scanf("%d",&vertices);
  printf("Enter the number of edges:");
  scanf("%d",&edges);
  printf("Enter the number of edges(source destination):\n");
  for(i=0;i<edges;i++)
  {
      scanf("%d %d",&src,&dest);
      adj[src][dest];
      adj[dest][src];
  }
  BFS(adj,start,vertices);
  return 0;
}