Я создал структуру с именем ArrayCount, которая содержит двойной массив и целое число, которое должно подсчитывать, как часто встречается массив.
Если размер двойного массива равен n, идея состоит в том, чтобысоздать массив структуры ArrayCount размером n!(в моем коде n! называется m).
Идея состоит в том, чтобы сохранить каждую перестановку в массиве ArrayCount, считая случаи каждой перестановки, для данного алгоритма.Но это только справочная информация, а не часть проблемы.
У меня проблемы с выделением памяти.Выделение для массива Array-Count работает нормально, но я не могу выделить память для включенных двойных массивов.
Сообщение об ошибке:
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
Иошибка происходит во время функции initiate_array_counts, когда я пытаюсь выделить память с помощью "double * array_counts[i].array = calloc(n, 8);
.
Заранее спасибо, Тимо
typedef struct {
double* array;
int counter;
} ArrayCount;
void initiate_array_counts(/*INOUT*/ArrayCount* array_counts,
/*IN*/int n){
int m = factorial(n);
for(int i = 0; i < m; i++){
double* array_counts[i].array = calloc(n, 8);
for(int j = 0; j < n; j++){
array_counts[i].array[j] = 0;
}
}
}
void shuffle_frequency(int n) {
double a[n];
for (int i = 0; i < n; i++) {
a[i] = i; // 0, 1, 2, ..., n - 1
}
int m = factorial(n);
ArrayCount* array_counts = calloc(m, sizeof(ArrayCount));
initiate_array_counts(array_counts, n);
for (int i = 0; i < 1000 * m; i++) {
shuffle(a, n);
update_array_counts(array_counts, m, a, n);
}
for (int i = 0; i < m; i++) {
printf("%4d%8d ", i, array_counts[i].counter);
printdaln(array_counts[i].array, n);
}
free(array_counts);
}
(я включил только необходимый код)