螺旋队列
螺旋队列:如下图所示的螺旋队列,以01所在点为坐标原点建立坐标轴,X方向向右为正,Y方向向下为正。如01坐标为(0,0),02坐标为(1,0),03坐标为(1,1)。试找出规律,给出任意坐标(x,y),返回该坐标处的数字,如给出(0,0)返回1,给出(1,1)返回3。
43 44 45 46 47 48 49
42 21 22 23 24 25 26
41 20 07 08 09 10 27
40 19 06 01 02 11 28
39 18 05 04 03 12 29
38 17 16 15 14 13 30
37 36 35 34 33 32 31
图1
图2
如图2可见,第2个方框记为第2层,内有9=(2*2-1)^2个数
如图3可见,第3个方框记为第3层,内有25=(3*2-1)^2个数,
第n层,内有(2n-1)^2个数
......
易知对于坐标(x,y),max(|x|,|y|)+1即为该点所在的层次,记为v,再记u=v-1。每一层的一条边上有2*u个数,每一层最小值为(u*2-1)^2+1,坐标为(u,-u+1),顺时针增加,最大值为(v*2-1)^2,坐标为(u,-u)。
如果x=u,即处于右面竖着的方框旁:
如果x=-u,即处于左面竖着的方框旁:
如果y=-u,即处于上面横着的方框旁:
如果y=u,即处于下面横着的方框旁:
int Spin(int x, int y)
{
}