/* 螺旋队列
设1的坐标是(0,0),的方向向右为正,y方向向下为正,
例如,7的坐标为(-1,-1),2的坐标为(0,1)。
编程实现输入任意一点坐标(x,y),输出所对应的数字。
43 44 45 46 47 48 49
42 21 22 23 24 25 26
41 20 7 8 9 10 27
40 19 6 1 2 11 28
39 18 5 4 3 12 29
38 17 16 15 14 13 30
37 36 35 34 33 32 31
算法:by smilelance (绝对独家,超级详细,如果你看完这个还不懂,我就无语了~~~)
1、从1开始向外扩散,任意数字所在层应为:t = max(|x|,|y|)。比如5,9在第一层
2、右上角斜线数字为:ur = (2t+1)*(2t+1) 左下角斜线数字为:dl = 2t*2t+1
3、每一圈数字分为四个区域:比如25所在的第二层:
21,22,23,24,25 A区,y == -t
17,18,19,20, B区,x == -t 除掉A区数字
13,14,15,16
螺旋队列算法详解
最新推荐文章于 2022-04-02 23:13:27 发布
本文详细介绍了螺旋队列的算法实现,包括如何根据坐标获取对应的数字。算法包括计算数字所在层数、确定不同区域的数字分布,并提供了一个C语言实现的lookupHelixNumber函数来查找螺旋队列中任意位置的数字。
摘要由CSDN通过智能技术生成