螺旋矩阵
螺旋矩阵是蛇形矩阵的一个变种
将1-N2自然数以顺时针或逆时针填入一个N阶方阵
解决这个问题的第一个小问题就是N的奇偶问题
例如 一个四阶方阵以顺时针填入的时候需要两圈
一个五阶方阵以顺时针填入的时候需要两圈,还剩一个芯
所以,奇数阶方阵比偶数阶方程多一个芯
那么我们把这个芯去掉之后,奇数阶方阵和偶数阶方阵有什么区别呢?
好像没有了。
这就是奇偶合并。
一般碰到分奇偶的问题首先要考虑的就是奇偶合并。
这样的话无论奇数还是偶数方阵的圈数是N/2,这个就不说了。
根据这个东西我们可以写出来一个循环
for(loop=0;loop<N/2;++loop){
}
接下来观察这个六阶方阵
首先看最上面一行1~5为上
再看最右面的一行6~10为右
接着看最下面的一行11~15为下
最后看最左面的一行16~20为左
这样第一圈的划分就出来了
至于为什么这么划分,每一部分都是5个数,保持了一致性
在编写代码的时候会容易一些
接下来我们找这个方阵的规律
设横坐标为i,纵坐标为j;
第一圈
上
i:0
j:0~n-2(因为N为阶数是不可变的,所以我取n=N)
右
i:0~n-2
j:n-1
下
i:n-1
j:n-1~1
左
i:n-1~1
j:0
第二圈
上
i:1
j:1~n-3
右
i:1~n-3
j:n-2
下
i:n-2
j:n-2~2
左
i:n-2~2
j:1
第三圈
上
i:2
j:1~n-4
右
i:2~n-4
j:n-3
下
i:n-3
j:n-3~3
左
i:n-3~3
j:2
每一圈的起始位置为对角线上点例如(0,0)(1,1)
我们可以发现这些点的i和j是相同的
而i又和loop相同,所以,我们可以把它改为
第一圈
上
i:loop
j:i~n-2
右
i:loop~n-2
j:n-i
下
n-1
j:n-1~loop+1
左
i:n-1~loop+1
j:loop
第二圈
同上
第三圈
同上
只要把可以用loop表示的都用lo