la risposta sta qui

"la allocazione della memoria è una responsabilità del programmatore nel linguaggio C"

Originariamente inviato da misterx
mi sa che ci stiamo allontanando dal vero problema.
scrivendo: printf("%d\n",sizeof(G)); mi viene stampato 200 che dovrebbe essere i 50 elementi dichiarati in MAX per 4 byte per struttura.
...
certo, questa è la memoria che hai allocato alla struttura
Digitando alla richiesta:
printf("Numero di vertici: ");
200
naturalmente perchè nella funzione leggi_grafo gli dici proprio di stampare il valore che gli hai dato in input (anche se sbagliato). Come ti ho detto dovresti inserire nella funzione leggi_grafo una
assert(n < MAX);
ciao
sergio