1
我試圖將DiGraph
轉換爲n元樹並按級別順序或BFS顯示節點。我的樹與此類似,但要大,使用這個例子簡單:網絡中的圖形的遍歷級別順序x
G = networkx.DiGraph()
G.add_edges_from([('n', 'n1'), ('n', 'n2'), ('n', 'n3')])
G.add_edges_from([('n4', 'n41'), ('n1', 'n11'), ('n1', 'n12'), ('n1', 'n13')])
G.add_edges_from([('n2', 'n21'), ('n2', 'n22')])
G.add_edges_from([('n13', 'n131'), ('n22', 'n221')])
樹:從這個question借來的數據:
n---->n1--->n11
| |--->n12
| |--->n13
| |--->n131
|--->n2
| |---->n21
| |---->n22
| |--->n221
|--->n3
我使用networkx.DiGraph
爲此目的而創建的圖成功。這是我創建有向圖碼:
G = nx.DiGraph()
roots = set()
for l in raw.splitlines():
if len(l):
target, prereq = regex1.split(l)
deps = tuple(regex2.split(prereq))
print("Add node:") + target
roots.add(target)
G.add_node(target)
for d in deps:
if d:
G.add_edge(target, d)
我從文件中讀取的所有數據與以下格式約200線,並試圖獲得一個依賴關係樹。我的圖形大約有100個有600個邊緣的節點。
AAA: BBB,CCC,DDD,
BBB:
DDD: EEE,FFF,GGG,KKK
GGG: AAA,BBB,III,LLL
....
...
..
.
展望networkx文檔在線後,我現在可以達到的水平輸出順序上做相關樹拓撲排序,用下面的代碼。
order = nx.topological_sort(G)
print "topological sort"
print order
輸出:
['n2', 'n3', 'n1', 'n21', 'n22', 'n11', 'n13', 'n12', 'n221', 'n131']
的順序似乎是正確的,但因爲我需要處理在一個批處理作業(從而節省時間),而不是連續的,我想在一級有序輸出批次輸出或使用BFS。達到此目的的最佳方法是什麼?
例如:水平[0:N],例如:
0. ['n']
1. ['n2', 'n3', 'n1',]
2. ['n21', 'n22', 'n11',]
3. ['n13', 'n12', 'n221', 'n131']
感謝您的快速反應,我的圖表看起來像這樣http://imgur.com/a/fnZh3我也無法得到節點與繪製名稱或大到足以查看。出於某種原因,對你的代碼做同樣的工作,但在我的圖表上返回一個空列表'[]'。我已經更新了有關問題的一些細節,如果它可能有幫助! – askb
另外有一種方法,我可以在level [0:n]打印這個,例如:1. ['n2','n3','n1',] 2. ['n21','n22','n11' ,] 3. ['n13','n12','n221','n131']? – askb
感謝您的努力,我已經用更多信息更新了這個問題,您的示例非常接近我正在尋找的內容。你能重新看看我更新的問題嗎?任何建議,將不勝感激。 – askb