我在使用Networkx管理一個依賴關係圖。 比方說,我有這個圖表,每個字母代表一個服務器使用Networkx遍歷圖(Python)
>>> 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,然後到入門C凌晨需要啓動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。
謝謝
謝謝你繪製圖表。這就是我認爲的「Networkx在我背後做的事情。因此,我的問題是:如何使用Networkx創建一個像我的例子中的樹? 最適合我的是當我創建G.add_edge(「B」,「C」)一個新的節點「C」創建重用連接到H的insead。 – Johny19
然後,你需要調用新的節點別的東西。可能是C1和C2。就我所知,NetworkX不允許具有相同標籤的多個節點。 – brentlance
但我需要節點具有相同的。就像我在主線中所說的那樣。我的節點是服務器名,我不能更改名稱,否則我不知道哪一個是哪個... 但真的Thorsten Kranz不是「錯」的圖是正確的,B依賴於「C AND D」 。它只是算法「dfs_successors()」輸出B只依賴於D,並且這是錯誤的 如果我的樹不可能與Networkx一起使用,那麼其他lib可能嗎?謝謝 – Johny19