算法在蜗牛二维数组中查找数字位置

Algorithm find number position in snail 2D array

我有一个二维数组正方形大小。

如:

(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

我正在尝试通过给出二维数组的 valuearray sizeY, X position 来找到解决方案。

示例:

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

我必须在二维数组中创建蜗牛的唯一想法和 return 位置..不太好。

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

有什么想法吗?

你可以使用这个功能:

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是蛇离矩阵最近边的距离,即"winding"层。

m 表示线段的 4 条边中的哪一条——包含目标值——位于:

0:上涨
1: 右
2:向下
3: 左边

根据m从一个包含4个表达式的列表中获取一个值,每个表达式都为相应的边量身定制:它定义了y坐标。 x.

应用了类似的方法(但表达式不同)