найти путь и преобразовать из словаря в список - PullRequest
1 голос
/ 16 июня 2020

Я использую библиотеку networkx для Python с BFS и DFS. Мне нужно получить дерево, а затем исследовать его, чтобы получить путь от начального узла до конечного узла.

Для части 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)]

- список узлов от начала до конца.

У вас есть какие-нибудь советы, как это сделать? Не могли бы вы мне помочь?

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Используйте понимание списка и подразумевайте добавление .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?

1 голос
/ 16 июня 2020

Вы можете просто преобразовать ключи словаря прямо в список:

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

DFS = nx.dfs_successors(mazePRIM, start)
print(list(dict(DFS).keys()))
...