2010-10-19 10 views
13

द्वारा किनारों 'वजन बदलने के लिए मैं एक भारित ग्राफ है:NetworkX (अजगर): कैसे नामित नियम

[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)] 

मैं द्वारा प्रत्येक बढ़त के वजन बदलना चाहते हैं:

F=nx.path_graph(10) 
G=nx.Graph() 
for (u, v) in F.edges(): 
    G.add_edge(u,v,weight=1) 

नोड्स सूची प्राप्त इस नियम:

ऐसे नोड 5 के रूप में एक नोड निकालने के लिए, स्पष्ट रूप से, धार (4, 5) और (5, 6) को नष्ट हो जाएगा, और प्रत्येक बढ़त के वजन के हो जाएगा:

+०१२३५१६४१०६१

{# इन किनारों पास के नष्ट कर दिया बढ़त (4, 5) और (5, 6)

(3,4) कर रहे हैं: 'वज़न' = 1.1,

(6,7): 'वजन '= 1.1,

#these किनारों पास के किनारों ऊपर उल्लेख हुआ है

(2,3):' वज़न '= 1.2,

(7,8):' वज़न '= 1.2,

# ये किनारे किनारे के पास हैं तों ऊपर उल्लेख किया

(1,2): 'वज़न' = 1.3,

(8,9): 'वज़न' = 1.3,

# इस बढ़त पास में है (1,2)

(0,1): 'वजन' = 1.4}

इस एल्गोरिदम को कैसे लिखें?

पीएस: path_graph सिर्फ एक उदाहरण है। मुझे किसी भी ग्राफ प्रकार के कार्यक्रम सूट की आवश्यकता है। इसके अलावा, कार्यक्रम को पुन: प्रयोज्य करने की आवश्यकता है, इसका मतलब है कि मैं हर बार मूल ग्राफ से एक नोड को हटा सकता हूं।

सादर

+0

मुझे वजन को पुनर्वितरण के नियमों को समझ में नहीं आता – inspectorG4dget

उत्तर

24

आप जी [यू] [वी] [ 'वज़न'] के रूप में या किनारे डेटा पर पुनरावृत्ति से बढ़त वजन तक पहुँच सकते हैं। तो आप उदा।

In [1]: import networkx as nx 

In [2]: G=nx.DiGraph() 

In [3]: G.add_edge(1,2,weight=10) 

In [4]: G.add_edge(2,3,weight=20) 

In [5]: G[2][3]['weight'] 
Out[5]: 20 

In [6]: G[2][3]['weight']=200 

In [7]: G[2][3]['weight'] 
Out[7]: 200 

In [8]: G.edges(data=True) 
Out[8]: [(1, 2, {'weight': 10}), (2, 3, {'weight': 200})] 

In [9]: for u,v,d in G.edges(data=True): 
    ...:  d['weight']+=7 
    ...:  
    ...:  

In [10]: G.edges(data=True) 
Out[10]: [(1, 2, {'weight': 17}), (2, 3, {'weight': 207})] 
संबंधित मुद्दे