【发布时间】:2021-12-14 16:37:18
【问题描述】:
我的递归函数有问题,希望在这里得到帮助。
我想写一个函数,找到两个节点之间的所有路径,找到解决方案后函数应该停止并输出第一个路径。如果该路径已经找到,该函数应该继续执行,直到找到下一条路径并再次停止并输出找到的路径。
为此,我编写了一个函数(或我打算这样做),它从起始节点开始,然后到它的邻居节点,然后到邻居节点的邻居节点等,直到到达结束节点。然后它应该输出路径。如果没有到达结束节点,它应该删除最后一个节点并继续在那里。所以是一种带回溯的DFS算法。
我的问题是函数在找到结束节点后并没有停止。我认为这是因为仍有“打开”的功能需要关闭。如果我在代码底部写“return pathfind(nknots)”而不是“pathfind(nknots)”,那么我的代码在到达结束节点时停止,但如果尚未到达结束节点,则不会继续回溯.所以在这两种情况下我都有问题。
有没有人知道我该如何解决这个问题?最好以一种我不必过多更改自己的代码/想法的方式?
def pathfind(x):
visited.add(x)
if neighbours[x] != {}:
for nknots in neighbours[x]:
if nknots == n:
print("final node is found")
augpath.append(n)
return augpath
elif nknots in augpath or nknots not in neighbours or nknots in visited:
print("Node already in augpath, visited or has no neighbours: ")
continue
else:
augpath.append(nknots)
pathfind(nknots) # pathfind on new node
visited.remove(nknots)
augpath.pop()
【问题讨论】:
-
您的函数以
visited.add(x)开头,但您从未定义变量visited? -
在某些时候你说函数应该在找到结束节点后继续,以搜索另一条路径。但后来你说“我的问题是函数在找到结束节点后并没有停止。”。我不明白。函数找到结束节点后该停止还是不停止?
标签: python recursion graph return