根据蛇形矩阵的每条对角线边上的点的横纵坐标相等得出:i+j==k
通过两个二维数组a[1005][1005]以及b[1005][1005]来完成矩阵的转化

#include<iostream>
using namespace std;
int a[1005][1005],b[1005][1005];
int main(){
    int n,k,i,j,s=1;
    cin>>n;//n行n列
    for(k=0;k<=n+n-2;k++){
        for(i=0;i<n;i++){
            for(j=0;j<n;j++)
                if(i+j==k) a[i][j]=s++;//根据矩阵的每条斜边上的点的横纵坐标相等得出:i+j==k
                                                       //用s来储存矩阵每个点的值
        }
    }//先变成右上至左下的遍历
    for(i=0;i<n;i++){
        for(j=0;j<n;j++) b[i][j]=a[i][j];
    }//先用b来储存二维数组a中的值
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            if((i+j+1)%2) b[i][j]=a[j][i];//再把奇数斜边位置变换
        }
    }
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            cout<<b[i][j]<<" ";//输出b中储存的值
        }
        cout<<endl;//记得换行
    }
}