как изменить алгоритм BFS, чтобы найти кратчайший путь (минимальное количество ребер) в языке Си? Я пытался сделать это сам, но это немного сложнее, чем я думал.
void BFS(struct Graph *G,struct queue *q,int layer)
{
while(q->front)
{
while(q->front && (G->adjList[q->front->v]->layer == layer))
{
int v = dQ(q);
printf("%d ",v); //afisare
struct node *head = G->adjList[v]->next;
while(head)
{
if(G->adjList[head->v]->marked)
{
head = head->next;
continue;
}
G->adjList[head->v]->layer = layer + 1;
G->adjList[head->v]->marked = 1;
insertQ(q,head->v);
head = head->next;
}
}
layer++;
printf("\n");
}
}
Может кто-нибудь помочь мне понять, как это работает, пожалуйста?