#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 1000
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
void initQueue(Queue *q) {
q->front = 0;
q->rear = 0;
}
int isQueueEmpty(Queue *q) {
return q->front == q->rear;
}
void enqueue(Queue *q, int value) {
q->data[q->rear++] = value;
}
int dequeue(Queue *q) {
return q->data[q->front++];
}
int optimizedBFS(int graph[][MAX_SIZE], int V, int src, int dst) {
int visited[V];
int dist[V];
memset(visited, 0, sizeof(visited));
memset(dist, 0x3f3f3f3f, sizeof(dist));
dist[src] = 0;
Queue q;
initQueue(&q);
enqueue(&q, src);
visited[src] = 1;
while (!isQueueEmpty(&q)) {
int current = dequeue(&q);
if (current == dst) break;
for (int i = 0; i < V; i++) {
if (graph[current][i] > 0 &&!visited[i]) {
visited[i] = 1;
dist[i] = dist[current] + graph[current][i];
enqueue(&q, i);
}
}
}
return dist[dst] == 0x3f3f3f3f? -1 : dist[dst];
}