首页 > 解决方案 > 查找路径并从字​​典转换为列表

问题描述

我正在使用带有 BFS 和 DFS 的 Python 的 networkx 库。我需要得到一棵树,然后探索它以获取从起始节点到结束节点的路径。

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

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

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

这是我到目前为止所做的:

BFS = 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)]

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

你对如何做有什么建议吗?你能帮我吗?

标签: pythondictionarynetworkxdepth-first-searchbreadth-first-search

解决方案


使用列表理解并暗示添加.keys()到字典的末尾:

DFS = nx.bfs_successors(mazePRIM,start)
print([n for n in dict(BFS).keys()])

DFS = nx.dfs_successors(mazePRIM, start)
print([n for n in DFS.keys()])

您可以在此处阅读有关字典键的更多信息:

如何在 Python 中将字典键作为列表返回?


推荐阅读