Let's now see how the process we did manually above can be automated in C although we will be using pseudocode for now.
#include <stdio.h>
#include <stdlib.h>
struct circularQueue
{
int size;
int f;
int r;
int *arr;
};
int isEmpty(struct circularQueue *q)
{
if (q->r == q->f)
{
return 1;
}
return 0;
}
int isFull(struct circularQueue *q)
{
if ((q->r + 1) % q->size == q->f)
{
return 1;
}
return 0;
}
void enqueue(struct circularQueue *q, int val)
{
if (isFull(q))
{
printf("This Queue is full");
}
else
{
q->r = (q->r + 1) % q->size;
q->arr[q->r] = val;
// printf("Enqued element: %d\n", val);
}
}
int dequeue(struct circularQueue *q)
{
int a = -1;
if (isEmpty(q))
{
printf("This Queue is empty");
}
else
{
q->f = (q->f + 1) % q->size;
a = q->arr[q->f];
}
return a;
}
int main()
{
struct circularQueue q;
q.size = 400;
q.f = q.r = 0;
q.arr = (int *)malloc(q.size * sizeof(int));
// BFS implementation
int node;
int i = 4;
int visited[7] = {0, 0, 0, 0, 0, 0, 0};
int a[7][7] = {
{0, 1, 1, 1, 0, 0, 0},
{1, 0, 1, 0, 0, 0, 0},
{1, 1, 0, 1, 1, 0, 0},
{1, 0, 1, 0, 1, 0, 0},
{0, 0, 1, 1, 0, 1, 1},
{0, 0, 0, 0, 1, 0, 0},
{0, 0, 0, 0, 1, 0, 0}};
printf("%d", i);
visited[i] = 1;
enqueue(&q, i); // enquque i for explaoration
while (!isEmpty(&q))
{
int node = dequeue(&q);
for (int j = 0; j < 7; j++)
{
if (a[node][j] == 1 && visited[j] == 0)
{
printf("%d", j);
visited[j] = 1;
enqueue(&q, j);
}
}
}
return 0;
}