此代码打印图中从 startNode 到 destinationNode 的所有路径。
我从 https://www.geeksforgeeks.org/find-paths-given-source-destination/ 复制了它并稍微修改了它。代码工作得很好,但我需要返回路径而不是打印路径,但不知道如何做到这一点。
如果我将 return 添加到 printAllPathsUtil(i, d, unvisited, path)
,它只会返回其中一个路径。
我不太擅长递归,现在不知道该做什么。
async def getAllPathsUtil(s, d, unvisited, path):
unvisited.append(s)
path.append(s)
if s == d:
path
else:
for i in (await children(s)):
if not(i in unvisited):
await getAllPathsUtil(i, d, unvisited, path)
path.pop()
unvisited.remove(s)
async def printAllPaths(startNode, destinationNode):
all_paths = await getAllPathsUtil(startNode, destinationNode, [], [])
print(all_paths)
答案 0 :(得分:1)
如果您想保留递归算法,那么使用 yield
可能是最简单的选择。
def graph_paths(s, d, visited, path):
visited.append(s)
path.append(s)
if s == d:
yield path
else:
for i in children(s):
if i not in visited:
yield from graph_paths(i, d, visited, path)
path.pop()
visited.remove(s)
def print_graph_paths(start_node, dest_node):
for path in graph_paths(start_node, dest_node, [], []):
print(path)
但作为一种更好的方法,我建议用堆栈替换递归调用,它将消除最大递归深度问题。