如何在离散2D空间中构造一个由给定长度的所有路径组成的数组

时间:2019-07-04 15:07:51

标签: python arrays while-loop

从平面上的(0,0)开始,给定正整数n,我想生成由(0,0)到n-1步组成的所有路径。一步可以是向右的一步,也可以是向上的一步。例如,如果n = 4,则路径将是(0,0),(1,0),(1,1),(1,2)。我目前正在使用python

我尝试让一些参数计算我正在执行的步骤数,然后使用while循环限制步骤数,并循环遍历起始数组[[[0,0]]]。 / p>

def f(n):
    A=[[[0,0]]]
    s=0
    while (int(s+1)<int(n)):
        for i in A:
            i.append([i[-1][0]+1,i[-1][1]])
            A.append(i+[i[-1][0],i[-1][1]+1])
        s+=1
    return A

print f(2)

我在第8行遇到一个错误的'int'对象,没有属性' getitem '。我也有一种感觉,上面的代码还有其他各种问题,但是不太确定最好的解决方法

1 个答案:

答案 0 :(得分:0)

欢迎使用Stackoverflow。这个问题非常适合递归技术。 如果在点P =(x,y)处的路径长度为N,则知道它形成两个 长度为N + 1的可能路径,一对指向(x + 1,y),一对指向(x,y + 1)。

您知道的唯一另一件事是,在起点处有一条长度为零的路径。鉴于此,您可以计算长度为1的路径,长度为2的路径以及 以此类推。将路径生成的逻辑与消费 我建议使用生成器函数的路径,允许您的逻辑yield 每当找到新路径时。然后,您可以遍历此生成器 列举路径。看来可行:

def paths(in_path, N=1):
    if N==1:
        yield in_path
    else:
        x, y = in_path[-1]
        yield from paths(in_path+[(x+1, y)], N-1)
        yield from paths(in_path+[(x, y+1)], N-1)

for path in paths([(0, 0)], 4):
    print(path)

我看到的输出是

[(0, 0), (1, 0), (2, 0), (3, 0)]
[(0, 0), (1, 0), (2, 0), (2, 1)]
[(0, 0), (1, 0), (1, 1), (2, 1)]
[(0, 0), (1, 0), (1, 1), (1, 2)]
[(0, 0), (0, 1), (1, 1), (2, 1)]
[(0, 0), (0, 1), (1, 1), (1, 2)]
[(0, 0), (0, 1), (0, 2), (1, 2)]
[(0, 0), (0, 1), (0, 2), (0, 3)]

令人高兴的是,其中似乎包含了您给出的示例。