Я пытаюсь рекурсивно создать магический ящик, в котором первое число помещается в середине первого ряда двумерного массива, а каждое последующее число перемещается на одну строку вверх и вправо на одну позицию.В случае коллизий текущее значение, которое будет помещено в массив, вместо этого помещается на 1 позицию ниже предыдущего числа.Я вставил пример ниже:
Введите размер магического квадрата: 3
8 1 6
3 5 7
4 9 2
#include<stdio.h>
/* Recursive function, square, for allocating values within the magic square */
int square(int row, int col, int m, int nextvalue, int *S[][m]){
int nextval = nextvalue;
int n = m;
if (nextvalue == 1){ //for first number placement
S[row][col] = 1;
square(row - 1, col + 1, m, nextvalue + 1, S[m][m]);
//return (square(row - 1, col + 1, m, nextvalue + 1, S[m][m]));
}
if (nextval = m){ //when nextvalue = n, end recursive function call
return 1;
}
if (row < 0){ //to check and see if the next row'th location is within range of n
row = m - 1;
}
if (col > (m - 1)){ //to check and see if the next col'th location is within range of n
col = 0;
}
else {
//check to see if the next spot is available
if (S[row][col] = 0){
S[row][col] = nextval;
square(row - 1, col + 1, m, nextvalue + 1, S[m][m]);
//return (square(row - 1, col + 1, m, nextval + 1, S[m][m]));
}
else if (S[row][col] != 0){
if (col == 0){
col = m - 1;
}
else if (col > 0){
col = col - 1;
}
if (row >= (m-2) || row == (m-1)){
row = (row + 2) - m;
}
else if (row < m-2){
row = row + 2;
}
S[row][col] = nextval;
square(row - 1, col + 1, m, nextvalue + 1, S[m][m]);
//return (square(row - 1, col + 1, m, nextval + 1, S[m][m]));
}
}
}
int main (){
int n = -1, middle = 0, i, j;
while (n == -1 || (n % 2 != 0)){
printf("Please enter and odd number, n, the size of the magic square:\n");
scanf("%d", &n);
}
/* Declaring the 2 Dimension Array, S, of size n x n */
int S[n][n] = 0;
middle = (n / 2) + 1;
square(1, middle, n, 1, S[n][n]);
/* Nested for loops for printing the magic square */
for (i = 0; i < n; i++){
for(j = 0; j < n; j++){
printf("%d\t", S[i][j]);
}
printf("\n");
}
return 0;
}
С помощью приведенного выше кода я пытаюсь рекурсивно передать строку, столбец, размер массива (n) и массив S в квадрат функции, чтобы рекурсивно добавить значения в массив.Тем не менее, я продолжаю получать следующие ошибки:
p2.c: In function 'square':
p2.c:9: warning: assignment makes pointer from integer without a cast
p2.c:10: warning: passing argument 5 of 'square' from incompatible pointer type
p2.c:25: warning: assignment makes pointer from integer without a cast
p2.c:26: warning: passing argument 5 of 'square' from incompatible pointer type
p2.c:42: warning: assignment makes pointer from integer without a cast
p2.c:43: warning: passing argument 5 of 'square' from incompatible pointer type
p2.c: In function 'main':
p2.c:58: error: variable-sized object may not be initialized
p2.c:61: warning: passing argument 5 of 'square' makes pointer from integer without a cast