奇数阶的魔方阵问题,以3*3为例

以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) 

连锁是什么意思?值都一样?

1、c语言中变量是不能作为数组长度的。map[n-1][n-1]是语法错误。
2、c语言中数组下标是从0开始的。如果是n阶矩阵,应定义int map[n][n],