关于蛇形矩阵的笔记
我们要构造一个n*m大的矩阵
首先让我们把矩阵中的每个值输入进去
因此我们需要定义x=0,y=0的初始点坐标
根据偏移量来定义两个偏移数组
dx={-1,0,1,0},dy={0,1,0,-1}
//x轴向下指,y轴向右指,中间(x,y)定义为(0,0)
//此时画图理解,例如向上就是(-1,0),x向它的负轴走1,而y没变
然后定义偏移下标d=1(1向右,2向下,3向左,0向上)
定义这个1230也和偏移数组下标息息相关,
例如向右移1个单位,d=1,此时dx[1]=0,dy[1]=1;
我们用定义的a,b做为容器,方便将变化的坐标存到x,y中,以此,x,y进入下一轮循环。
代码如下:
int a,b,x=0,y=0,d=1;
for(int k=1;k<=n*m;k++){
M[x][y]=k;
a=x+d[x],b=y+d[y];
//此时需要进行判断是否需要转弯,也就是说,
//当a>=n,a<0,b>=m,b<0或者M[a][b]为非0值时执行转弯
//特别解释M[a][b],如果它存入值的地方原本是0,也就是说并没有存过任何值,那么就不算“撞墙”
if(a<0||a>=n||b<0||b>=m||M[a][b]){
d=(d+1)%4;//超过3时又为0
a=x+dx[d],b=y+dy[d];
}
x=a,y=b;
}
剩下的就都为打印,就不过多赘述了。