从平面上的(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 '。我也有一种感觉,上面的代码还有其他各种问题,但是不太确定最好的解决方法
答案 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)]
令人高兴的是,其中似乎包含了您给出的示例。