Allora fai queste correzioni e il codice funzionerà, ma se rivedi le strutture dati sarà tutto più semplice.
In grafo.c
GrafoAdj convertToLista (GrafoAdj G, GrafoMatr M, int n) {
int i,j;
for(i=0; i<n; i++) {
G=creaNodoLista(G,i+1);
printf("E' stato aggiunto il VERTICE %d\n", i+1);
for(j=0; j<n; j++) {
if((M[i][j])==1) {
printf("Esiste un arco da %d a %d\n",i+1,j+1);
creaNodoListaAdj(G,j+1,i+1);
}
}
}
return G;
}
In grafolista.c
void creaNodoListaAdj (GrafoAdj g, int val, int nodo) {
if(g==NULL) printf("::Errore:: Grafo Vuoto!\n\n");
else {
if (g->vertice==nodo) { // verifica che il vertice del grafo corrisponde al nodo di cui bisogna aggiungere la lista di adj
printf("g->vertice==nodo\n");
g->adiacenze=lista_insert(g->adiacenze,val);
} else
creaNodoListaAdj(g->next,val,nodo);
}
return;
}
In grafoparser.c
void verticiAdj (GrafoAdj G, GrafoMatr M, int nodo, FILE *file) {
//Traduci vertici adiacenti
int res,val;
float peso;
res=confronto(file,PUNT); // Cerca freccia che indica a quali vertici punta il nodo in questione
if (res) {
// Se IL SIMBOLO PUNTATORE è stato trovata verificare che segua un peso
sposta(file,PARSX);
if(confronto(file,PESO)) {
peso=traduciPeso(file);
if(peso>1)
printf("ha %d figli: ", (int)peso);
else if (peso==0)
printf("non ha figli.");
else
printf("ha 1 figlio: ");
while (peso>0) {
sposta(file,NODO);
sposta(file,BARRA); //dopo la barra si trovano i vertici adiacenti
sposta(file,NODO);
val=traduciIntero(file);
printf("%d ",val);
if(G!=NULL) creaNodoListaAdj(G,val,nodo);
else M[nodo-1][val-1]=1;
peso=peso-1;
}
printf("\n");
sposta(file,PUNTOV);
}
}
else printf("ERRORE SINTASSI PESO -2!\n");
}
In grafolista.h
void creaNodoListaAdj (GrafoAdj g, int val, int nodo);