15 | 7 | 6 | 2 | 1 |
16 | 14 | 8 | 5 | 3 |
22 | 17 | 13 | 9 | 4 |
23 | 21 | 18 | 12 | 10 |
25 | 24 | 20 | 19 | 11 |
为实现以上蛇形矩阵,自存屎山代码如下
#include<stdio.h>
#define N 30
int main(){
int n,i=1,j,dic=1,k; //定义1为往左上走,-1为往右下走
int sb[N][N];
scanf("%d",&n);
j = n;
sb[i][j] = 1;
for(k=2;k<=n*n;k++){
if(dic == 1){//往左上方移动
if(i==1){//遇到上边界
if(j!=1){//遇到上边界而不碰左边界
sb[i][--j] = k; //向左
dic = -1;//方向改为右下
continue;
}
else{//遇到上边界的同时遇到左边界
sb[++i][j] = k;//向下
dic = -1;//方向改为右下
continue;
}
}
else{//正常左上移动
if(j!=1){//正常左上移动
sb[--i][--j] = k;//向左上
continue;
}
else{//遇到左边界而不碰上边界
sb[++i][j] = k;//向下
dic = -1; //方向改为右下
continue;
}
}
}
if(dic == -1){//往右下走的时候
if(j==n){
if(i!=n){
sb[++i][j] = k ;//遇到右边界变为往下走
dic = 1 ;//往下走之后再变为左上
continue;
}
else{//遇到下边界 且遇到右边界
sb[i][--j] = k;//往左走
dic = 1;//方向改为左上
continue;
}
}
else if(i==n){//遇到下边界
sb[i][--j] = k;
dic = 1;//遇到下边界变为往右走
continue ;
}
else{
sb[++i][++j] = k ;//正常往右下走
continue;
}
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("%d ",sb[i][j]);
}
printf("\n");
}
}