Vi scrivo le parti di codice che riguardano questa matrice, l'indice i corrisponde a quello che prima ho chiamato M, l'indice j ad N:
#define MAX 10000
int i, j;
int **vicini;
vicini = malloc(MAX * sizeof(int *));
for (i = 0; i < MAX; i++)
{
vicini[i] = malloc(MAX * sizeof(int));
}
e poi inizializzo i vari elementi ponendoli uguali a -1 (il -1 è un valore che mi indica che non sono ancora stati considerati. Poi nel corso del programma assumeranno un valore maggiore o uguale a 0):
for (i = 0; i < MAX; i++)
{
for (j = 0; j < MAX; j++)
{
vicini[i][j] = -1;
}
}
in questo modo utilizzo la memoria occupata da una matrice MAX * MAX di interi.
Ma, come dicevo prima, la maggior parte degli elementi avrà l'indice j che non supera poche unità, quindi una matrice così grande è uno spreco assurdo di memoria.
Posso in qualche modo utilizzare realloc per aumentare l'indice j solo per gli elementi i che mi interessano?