关于C语言,方阵填数

img

#include<stdio.h> 
int a[20][20];
int main() {

    int n,k=1,direct=2;//direct:1向上  2向下  3向左  4向右
    printf("N=");
    scanf("%d",&n);
    int i=0,j=0;
    while(k<=n*n) {    
        if(a[i][j]==0) {
            a[i][j]=k;
            k++;
        }
        if(direct == 1) { //向上
            i--;//行减1
            if(i==-1||a[i][j]!=0) {
                direct=3;
                i++;
                j--;
            }
        } else if(direct == 2) { //向下
            i++;//行加1
            if(i==n||a[i][j]!=0) {
                direct=4;
                i--;
                j++;
            }
        } else if(direct == 3) { //向左
            j--;//列减1
            if(j==-1||a[i][j]!=0) {
                direct=2;
                i++;
                j++;
            }
        } else if(direct == 4) { //向右
            j++;//列加1
            if(j==n||a[i][j]!=0) {
                direct=1;
                i--;
                j--;
            }
        }
    }
    for(i=0; i<n; i++) {
        for(j=0; j<n; j++) {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}