/*
给定一组整数1~n^2;按规则填入到n*n的二维数组中
例如:n = 4
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16
*/
void function(int **arr,int len,int *val)
{
int i,j,k,m,n;
int flag = 1;
arr[0][0] = val[0];
arr[len-1][len-1] = val[len*len-1];
m = 1,n = 0;
k = 1;
for(i = 2;i <= len;i++)
{
if(flag == 1)
{
for(j = 0;j < i;j++)
{
arr[m][n] = val[k++];
m--;
n++;
}
m++,n--;
}
if(flag == 0)
{
for(j = 0;j < i;j++)
{
arr[m][n] = val[k++];
m++;
n--;
}
m--,n++;
}
if(flag == 1)
{
n++;
flag = 0;
}
else if(flag == 0)
{
m++;
flag = 1;
}
}
flag = 1;
m = len-2,n = len-1;
k = len*len-2;
for(i = 2; i < len;i++)
{
if(flag == 1)
{
for(j = 0; j< i;j++)
{
arr[m][n] = val[k--];
m++,n--;
}
m--,n++;
}
else if(flag == 0)
{
for(j = 0; j< i;j++)
{
arr[m][n] = val[k--];
m--,n++;
}
m++,n--;
}
if(flag == 1)
{
n--;
flag = 0;
}
else if(flag == 0)
{
m--;
flag = 1;
}
}
}
int main()
{
int val[16];
int len = 6;
int i =0,j;
for(i = 0;i<len*len;i++)
val[i] = i+1;
int **arr = (int **)malloc(sizeof(int)*len);
for(i = 0;i<len;i++)
arr[i] = (int*)malloc(sizeof(int)*len);
function(arr,len,val);
for(i = 0;i<len;i++)
{
for(j = 0;j<len;j++)
printf("%d ",arr[i][j]);
printf("\n");
}
for(i = 0;i<len;i++)
free(arr[i]);
return 0;
}