算法在蜗牛2D数组中查找数字位置

时间:2016-11-08 18:37:34

标签: arrays algorithm spiral

我有一个2D数组方块大小。

如:

(3x3)         (4x4)
1 2 3    or   1   2   3   4
8 9 4         12  13  14  5
7 6 5         11  16  15  6
              10  9   8   7

我正在尝试通过提供2D数组的valuearray size Y, X position来找到解决方案。

例:

>> find_y_x_in_snail(3, 4)
1, 2
# in a 3x3 array, search value 4
return y=1 x=2

唯一的想法是我必须在2D数组中创建蜗牛并返回位置..不是那么好。

我找到了相反的算法here(第一个例子)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用此功能:

def find_y_x_in_snail(n, v):
    r = 0
    span = n
    while v > span:
        v -= span
        r += 1
        span -= r%2
    d, m = divmod(r,4);
    c = n-1-d
    return [d, d+v, c, c-v][m], [d+v-1, c, c-v, d][m] # y, x

解释

r 是" snake"的角落数量。需要采取达到目标价值。

span 是蛇的当前直线段中的值的数量,即它以 n 开头,并在下一个角落之后减少,并且每隔一个角落再减少。

d 是蛇与矩阵最近一侧的距离,即"绕组"水平。

m 表示该段(包含目标值)的4个边中的哪一个位于:

0:up    1:右
   2:向下
   3:离开

取决于 m ,从包含4个表达式的列表中获取值,每个表达式都针对相应的一方进行了定制:它定义了 y < / em> 坐标。对 x 应用了类似的方法(但使用了不同的表达方式)。