我正在使用 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 :[D,C] ??
我想通过这样做来精确
>>> nx.dfs_successors(G,"B")
{'B': ['C', 'D']}
所以一切都是“内部”正确的,只是 dfs_successors 没有以我希望的方式显示它。
谢谢