【问题标题】:convert output from dictionary to list with bfs and dfs networkx使用 bfs 和 dfs networkx 将输出从字典转换为列表
【发布时间】:2020-10-06 06:45:40
【问题描述】:

我目前正在使用带有 BFS 和 DFS 的 Python 的 networkx 库。我需要获取一棵树,然后对其进行探索以获取从开始节点到结束节点的路径。

对于 BFS 部分,我使用的是 bfs_successors,它从源代码返回广度优先搜索中的后继迭代器。

对于我正在使用的 DFS 部分:dfs_successors,它从源代码中返回深度优先搜索的继承者字典。

我需要从两种算法中获取从源到端的节点列表。每个节点是 (x, y) 并且是网格中的一个单元格。

您对如何操作有什么建议吗?你能帮帮我吗?

MWE:

DFS = nx.bfs_successors(mazePRIM,start)
print(dict(BFS))

DFS = nx.dfs_successors(mazePRIM, start)
print(DFS)

我明白了:

{(0, 0): [(0, 1), (1, 0)], (1, 0): [(1, 1)], (1, 1): [(1, 2)], (1, 2): [(0, 2), (1, 3)], (0, 2): [(0, 3)]}

{(0, 0): [(0, 1), (1, 0)], (1, 0): [(1, 1)], (1, 1): [(1, 2)], (1, 2): [(0, 2), (1, 3)], (0, 2): [(0, 3)]}

但我需要这样的输出:

[(0, 0), (1, 0), (1, 1), (1, 2), (1, 3)]

这是从头到尾的节点列表。

【问题讨论】:

  • 从两种算法中推断出节点列表是什么意思?你能分享一个最小的可重现的例子吗?
  • 嗨!我的意思是获取树,然后找到从开始节点到结束节点的路径...我添加了示例

标签: python graph networkx depth-first-search breadth-first-search


【解决方案1】:

IIUC 您对查找与nx.bfs_successors 相伴的所有继任者并不真正感兴趣,因为您只需要源节点和目标节点之间的路径。

为此,您可以找到shortest path(如果有多个):

nx.shortest_path(G, source, target)

或者找到它们之间的所有简单路径:

nx.all_simple_paths(G, source, target)

它返回一个生成器,其中包含两个节点之间的所有简单路径。

【讨论】:

  • 但这是为什么呢?根据您的问题,我了解到您只对这些节点之间的路径感兴趣@hello
  • 我想同时使用两者并比较它们的速度,看看哪个更快
  • 我的代码有很多行,我想看看哪种算法能更快地完成这项工作,然后打印一个视觉输出。我尝试了 Dijkstra 和 Bellman-Ford,但我想看看这些会发生什么。这个输出字典的东西是我唯一无法修复的部分......
  • 但是您并没有真正解决我的问题...@hello 如果您只对两个节点之间的路径感兴趣,为什么要使用 dfs_successors 查找所有继任者?
  • 哦,操作...我认为这是正确的做法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2017-04-23
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
相关资源
最近更新 更多