Я немного играю с Networkx, чтобы управлять графиком зависимостей. Скажем, у меня есть этот график, каждая буква которого представляет сервер
>>> G = nx.Graph()
>>> G.add_edge("A","B")
>>> G.add_edge("A","H")
>>> G.add_edge("H","C")
>>> G.add_edge("B","C")
>>> G.add_edge("B","D")
A
/ \
H B
/ / \
C C D
Итак, здесь мы видим, что перед запуском A нам нужно запустить H и B, а для запуска H нам нужно запустить C, а затем, чтобы начать B, нам нужно запустить C и D.
Немного повозившись с Networkx, я обнаружил, что могу получить это, выполнив обход dfs
print nx.dfs_successors(G,"A")
{A:[H,B], H:[C], B:[D] }
Но у меня проблема с этим методом. Как вы можете видеть, когда в дереве есть две одинаковые буквы, Networkx решила поместить только одну из них в окончательную структуру (что правильно). Но мне нужна полная структура. Как я могу заставить Networkx добавить в структуру B :[ОКРУГ КОЛУМБИЯ] ??
Я хочу уточнить это, сделав
>>> nx.dfs_successors(G,"B")
{'B': ['C', 'D']}
Так что все "внутренне" правильно, просто dfs_successors отображает это не так, как я хотел бы.
Спасибо