根据蛇形矩阵的每条对角线边上的点的横纵坐标相等得出: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;//记得换行 } }