Матрица перестановок?

92
12

поэтому у меня есть структура матрицы, и я должен заполнить перестановками в диапазоне от 0 ~ nr_vals в N столбцах. Я закончил часть перестановки, но я не могу определить указатели с массивом. Любая помощь будет оценена по достоинству. Существует функция печати, которую я вызываю, и все, что я делаю, печатает, и это все. Предполагается напечатать перестановки (DONE) после выделения их в матрицу. что я делаю неправильно, а также как я могу освободить матрицу?

функция печати:

void print_2D(matrix_ptr mat);

struct matrix_2D_struct {
int** data_arr;
int rows;
int cols;
};
typedef struct matrix_2D_struct * matrix_ptr;

matrix_ptr perm_rec_2(int N, int nr_vals) {
struct matrix_2D_struct *matrix = malloc(sizeof *matrix);
int j = 0;
int i = 0;
prem_rec_helpTwoForMatrix (N, nr_vals, i, matrix->data_arr, j);
return NULL;
}

void prem_rec_helpTwoForMatrix(int N, int nr_vals, int i, int **a[], int j)
{
i = N - 1;
while(a[i][j] < nr_vals){
a[i][j]++;
}
while(i >= 0 && a[i][j] == nr_vals){
i--;
}
if(i < 0)
{
return;
}
a[i][j]++;
while(++i < N)
{
a[i] = 0;
}
prem_rec_helpTwoForMatrix(N, nr_vals, i, **a, j);
}

спросил(а) 2016-10-23T00:09:00+03:00 4 года назад
1
Решение
58

Это частичный ответ:

После выделения matrix вы должны выделить matrix->data_arr.

Предполагая, что массив N x N большой:

struct matrix_2D_struct *matrix = malloc(sizeof *matrix);

if (N < 1)
{
printf("error!\n");
return ...
}

matrix->data_arr = malloc(N*sizeof(int*));
int i, j;
for (i = 0; i < N; i++)
matrix->data_arr[i] = malloc(N*sizeof(int));

Инициализация (как указано в комментарии)

for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
matrix->data_arr[i][j] = 0;

Теперь вы можете проверить, работает ли он:

matrix->data_arr[2][0] = 20;
matrix->data_arr[0][4] = 4;
printf("%d\n", matrix->data_arr[2][0]);
printf("%d\n", matrix->data_arr[0][4]);

Когда вам больше не нужны данные, вы можете освободить их (данные автоматически освобождаются при выходе из программы)

for (i = 0; i < N; i++)
free(matrix->data_arr[i]);
free(matrix->data_arr);
free(matrix);

ответил(а) 2016-10-23T01:13:00+03:00 4 года назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема