//我的思路挺简单,循环判断部分有冗余的部分不知道怎么简化,求大佬指点
#include <stdio.h>
int main() {
    int arr[1000][1000];
    int n = 0;
    scanf("%d", &n);
    int i = 0, j = 0, count = 0, val = 1, flag = 1;//循环计数//起始数1//区别蛇形方向  
    while(count<2*n-1){
    for(i=0; i<=count; i++)
        for(j=0; j<=count; j++)
            if(i+j==count && i<n && j<n)//不能超出数组的下标范围
                if(flag==1)
                arr[j][i] = val++;
                else
                arr[i][j] = val++;
    count++;//循环计数加1
    flag=-flag;//改变蛇形方向
    }
    for(i=0; i<n; i++){
        for(j=0; j<n; j++)
            printf("%d ", arr[i][j]);
    printf("\n");
    }
    return 0;
}