Questa è la funzione che mi da problemi:
codice:
//mi estrae la testa,e mi restituisce l'attuale testa della lista
struct nodo_lista_adiacenti *estrai_testa(struct nodo_lista_adiacenti *testa)
{
struct nodo_lista_adiacenti *corrente;
corrente= testa;
if(corrente != NULL)
{
testa= testa->next;
free(corrente);
} return testa;
}
//chiamata da quest'altra funzione:
codice:
struct nodo_lista_adiacenti *bfs(struct vertice *grafo, int i, int dim)
{
int confronto; //inizializzo la coda vuota
struct nodo_lista_adiacenti *lista=NULL,
*testa, *adiacenti=NULL, *da_restituire=NULL;
//coloro tutti i vertici di bianco
vertici_bianchi(grafo, dim);
// i è l'indice del vertice da cui parte l'esplorazione
strcpy(grafo[i].colore, "grigio");
grafo[i].distanza_precedente= 0;
grafo[i].predecessore= 0;
//inserisco in coda alla lista i che è un indice
lista= inserisci_valore_in_coda(i, lista);
while(lista != NULL)
{
testa= visualizza_testa(lista);
lista=estrai_testa(lista);
adiacenti= cerca_adiacenti(testa->info, grafo);
while(adiacenti != NULL)
{
if( (confronto= (strcmp(grafo[adiacenti->info].colore, "bianco"))) == 0)
{
strcpy(grafo[adiacenti->info].colore, "grigio");
grafo[adiacenti->info].distanza_precedente= grafo[testa-
>info].distanza_precedente +1; grafo[adiacenti->info].predecessore= testa->info;
lista= inserisci_valore_in_coda(adiacenti->info, lista);
da_restituire= inserisci_valore_in_coda(adiacenti->info, da_restituire);
}
adiacenti= adiacenti->next;
}
strcpy(grafo[testa->info].colore, "nero");
}
return da_restituire;
}