蛇形矩阵-练的不止蛇形–练的是游历矩阵的手段
通过蛇形矩阵,除了双for循环,还可以用方向数组的方法给矩阵赋值,我称之为“游历”,因为下一个数的位置由方向数组控制和循环变量无关。就像一个人拿着地图游玩。
在这里我除了蛇形,还可以波形运动,哈哈
横波矩阵
#include <cstdio>
using namespace std;
int h[110][110];
int dx[]={0,1,0,1},dy[]={1,0,-1,0};
int main(){
int n=5,m=6;
for(int x=0,y=0,d=0,k=1;k<=n*m;k++){
//给当前位置赋值
h[x][y]=k;
//准备下一个位置
int a=x+dx[d],b=y+dy[d];
if(b>=m || b<0 || a>x){ //x只增加1下,故a>x说明增加了,必须马上换方向了
d=(d+1)%4;
a=x+dx[d],b=y+dy[d];
}
x=a,y=b;
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d ",h[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
输出效果:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 16 17 18
24 23 22 21 20 19
25 26 27 28 29 30
纵波矩阵
#include <cstdio>
using namespace std;
int h[110][110];
int dx[]={1,0,-1,0},dy[]={0,1,0,1};
int main(){
int n=5,m=6;
for(int x=0,y=0,d=0,k=1;k<=n*m;k++){
//给当前位置赋值
h[x][y]=k;
//准备下一个位置
int a=x+dx[d],b=y+dy[d];
if(a>=n || a<0 || b>y){
d=(d+1)%4;
a=x+dx[d],b=y+dy[d];
}
x=a,y=b;
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d ",h[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
1 10 11 20 21 30
2 9 12 19 22 29
3 8 13 18 23 28
4 7 14 17 24 27
5 6 15 16 25 26