/**
* Return an array of arrays.
* Note: The returned array must be malloced, assume caller calls free().
*/
int** generateMatrix(int n) {
if(n == 0) return NULL;
int i, j, k, flag = 0;
int **res = (int**)malloc(sizeof(int*) * n);
for(k = 0; k < n; ++k)
res[k] = (int*)malloc(sizeof(int) * n);
for(k = 0; k < n / 2; ++k){
for(j = k; j < n - 1 - k; ++j) res[k][j] = ++flag;
for(i = k; i < n - 1 - k; ++i) res[i][n - 1 - k] = ++flag;
for(j = n - 1 - k; j > k; --j) res[n - 1 - k][j] = ++flag;
for(i = n - 1 - k; i > k; --i) res[i][k] = ++flag;
}
if(n%2) res[n/2][n/2] = ++flag;
return res;
}
* Return an array of arrays.
* Note: The returned array must be malloced, assume caller calls free().
*/
int** generateMatrix(int n) {
if(n == 0) return NULL;
int i, j, k, flag = 0;
int **res = (int**)malloc(sizeof(int*) * n);
for(k = 0; k < n; ++k)
res[k] = (int*)malloc(sizeof(int) * n);
for(k = 0; k < n / 2; ++k){
for(j = k; j < n - 1 - k; ++j) res[k][j] = ++flag;
for(i = k; i < n - 1 - k; ++i) res[i][n - 1 - k] = ++flag;
for(j = n - 1 - k; j > k; --j) res[n - 1 - k][j] = ++flag;
for(i = n - 1 - k; i > k; --i) res[i][k] = ++flag;
}
if(n%2) res[n/2][n/2] = ++flag;
return res;
}