python - 如何使用 DFS 在有向图中递归查找路径
问题描述
我似乎无法弄清楚如何将我的解决方案转换为在有向图而不是无向图上工作。
我目前有两种不同的方法;迭代和递归。
迭代:
def dfs_iterative(graph, start_vertex):
visited = set()
traversal = []
stack = [start_vertex]
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.add(vertex)
traversal.append(vertex)
stack.extend(reversed(graph[vertex]))
return traversal
递归:
def dfs_recursive(graph, node, visited):
if node not in visited:
visited.append(node)
for n in graph[node]:
dfs_recursive(graph,n, visited)
return visited
当根据下面显示的输出测试这些时graph
,输出始终是Undirected。
graph = {
'A' : ['B','S'],
'B' : ['A'],
'C' : ['D','E','F','S'],
'D' : ['C'],
'E' : ['C','H'],
'F' : ['C','G'],
'G' : ['F','S'],
'H' : ['E','G'],
'S' : ['A','C','G']
}
# returns ['A', 'B', 'S', 'C', 'D', 'E', 'H', 'G', 'F']
我想首先弄清楚如何更改我的代码,使我的图的边缘指向一个方向,然后如何调用这些函数来获取图中的其余不同路径。
如果我不得不猜测后者的一些伪代码,我会假设
Call function with random vertex
store result in Dict
repeat while result not in Dict
Repeat recursively
可以迭代完成吗?
解决方案
推荐阅读
- python - 将列表中的所有元素打印到矩形中的函数
- python-3.x - 如何让 discord bot 自动发送直接消息 [Discord.py]
- java - Java 适合网站形式。编译问题
- bash - 如何将 .tab.gz 文件合并为一个不重复列标题的 gz 文件?
- firebase - Flutter:从A类的TextField中获取值并将其传递给另一个B类
- docker - 如何在 docker-compose 中挂载单个文件
- php - 由于权限,无法将文件上传到服务器
- azure-aks - dapr 自托管应用程序可以调用托管在 kubernetes 上的远程 dapr 服务吗?
- reactjs - 数据更改后 FlatList 无法正确显示数据
- python - 将 Lambda 变量传递给 Glue 脚本 AWS