我正在使用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进行微调,我发现可以通过进行深度优先遍历来获得这个结果。
print nx.dfs_successors(G,"A")
{A:[H,B], H:[C], B:[D] }
但是我对这种方法有些问题。正如您所看到的,在树中存在两个相同的字母时,Networkx 只选择将其中一个放入最终结构中(这是正确的)。但我需要完整的结构。如何强制 Networkx 将 B:[D,C] 添加到结构中?
我想澄清的是:
>>> nx.dfs_successors(G,"B")
{'B': ['C', 'D']}
所以一切都是“内部”正确的,只是dfs_successors显示它的方式不符合我的意愿。
谢谢