我们可以使用堆栈和迭代的方法来实现。以下是代码示例:
def find_all_paths(graph, start, end):
# 创建一个stack,用来存储当前的路径
stack = [(start, [start])]
# 如果起点和终点相同,则返回一个空列表
if start == end:
return []
# 创建空列表,用于存储所有路径
all_paths = []
# 当stack不为空时,继续查找路径
while stack:
(vertex, path) = stack.pop()
# 查找该节点到其他节点的所有邻居节点
for next_vertex in graph[vertex] - set(path):
# 如果邻居节点为终点,则添加到路径列表中
if next_vertex == end:
all_paths.append(path + [next_vertex])
# 如果邻居节点不是终点,则将邻居节点添加到stack中,继续查找
else:
stack.append((next_vertex, path + [next_vertex]))
# 返回所有路径
return all_paths
这个函数接受一个字典表示的图形,起始点和终点。它使用一个堆栈来存储当前路径,并使用一个while循环来查找所有可能的路径。对于每个节点,它检查它的邻居,并将未访问的邻居节点添加到堆栈中,继续查找路径。如果找到终点,则将路径添加到所有路径列表中。最后,返回所有路径列表。
上一篇:不使用递归复制链表。
下一篇:不使用递归镜像二叉树