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