以3*3魔方阵为例,运行如下代码后出现[0][2]和[1][0]出现连锁现象,怎么回事,怎么解决?望大神指教
#include<stdio.h>
int main()
{
int n;//row&line
int num,i=0,j=0,k,l;//loop
printf("Input magic_map's n:");
scanf("%d",&n);
int map[n-1][n-1];
for(k=0;k<n;k++)//format map[][]
{
for(l=0;l<n;l++)
{
map[k][l]=0;
}
}
while(n%2==0)
{
printf("input n again:");
scanf("%d",&n);
}
map[0][1]=1;//put 1 to the [0][1]
i=-1;j=2;//move to put 2
for(num=2;num<=n*n;num++)
{
if(i<0&&j>(n-1))//A
{
map[i+2][j-1]=num;
i=i+2;j=j-1;//note the location of data,the same as follows
printf("here is map[%d][%d]=%d from A\n",i,j,map[i][j]);
}else if(i<0)//B
{
map[n-1][j]=num;
i=n-1;j=j;
printf("here is map[%d][%d]=%d from B\n",i,j,map[i][j]);
}else if(j>n-1)//C
{
map[i][0]=num;
i=i;j=0;
printf("here is map[%d][%d]=%d from C\n",i,j,map[i][j]);
}else if(map[i][j]!=0)//D
{
map[i+2][j-1]=num;//map[2][0]
i=i+2;j=j-1;
printf("here is map[%d][%d]=%d from D\n",i,j,map[i][j]);
}else if(map[i][j]==0)//E
{
map[i][j]=num;
printf("here is map[%d][%d]=%d from E\n",i,j,map[i][j]);
}
i--;j++;
printf("============================================\n");
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%5d",map[i][j]);
}
printf("\n");
}
return 0;
}
![图片说明](https://img-ask.csdn.net/upload/201512/08/1449550451_731619.png)