有这样一个(数列||矩阵)
20 21 22 23 24 ..
19 06 07 08 09
18 05 00 01 10
17 04 03 02 11
16 15 14 13 12
它的特征是,数字从最中间的元素称螺旋状展开,其中的元素可以有无限个。
楼主的问题是:
比如 当 N = 0,它的邻居就是:
06 07 08
05 00 01
04 03 02
当 N = 02,它的邻居就是:
00 01 10
03 02 11
14 13 12
由于数字可以是无限个,那么基本上不可能将元素映射到一个有限集合里算了(比如用一个固定长宽的数组来计算座标之类)。
楼主是个算法渣,如果这个问题很菜的话,求轻拍
1
sean10 2017-05-15 13:10:35 +08:00 via iPhone 1
不明白你说的无限是什么意思,这个不是就叫螺旋矩阵吗
|
2
Mistwave 2017-05-15 13:27:49 +08:00 1
1. 这个就叫螺旋矩阵
2. 思考了一下(同算法渣),没有找到给定 N,不建立矩阵直接给出其邻居的方法。还是只能先通过给定 N 建立矩阵,然后去矩阵里面搜索。可以有这些优化方式:快速建立矩阵的方式;保存之前建立的矩阵;在已有矩阵上增量添加。 |
3
bianhua OP |
4
wuyukai 2017-05-15 14:19:19 +08:00 1
找找规律吧,简单的绘了个图,通过规律可以得出每一层的边长和四个顶点的值,通过你给定的 N,以起点和终点的值作为范围,求出层数 n 的值。然后边长就可以得出了,以一个点为中心,找其余八个点,主要找左右两侧的点,也就是相邻层的数值,根据的就是边长,按它的绕行方式推算回去,对于一些特殊情况,自己再加以判断,N 落在四条不同的边上还是有不同的区别的,大概就这思路吧。
![20170515149482877456134.jpg]( http://ofrdtlim5.bkt.clouddn.com/20170515149482877456134.jpg) |
5
blankme 2017-05-15 14:27:01 +08:00 via Android 1
算算螺旋线的长度就知道 f(x, y)了
|
6
blankme 2017-05-15 14:32:58 +08:00 via Android 1
因为图形正好是矩形,所以比较简单的算法就是
中间区域的面积 + 最外面不完整的那圈的长度 |