2016-12-09 21 views
0

私はPythonには新しく、Pythonでグラフのデータ構造を実装しようとしています。 私はこのコードを書いたが、私は望む結果が得られていない。 コード:Pythonを使用したグラフの実装

class NODE: 
    def __init__(self): 
     self.distance=0 
     self.colournode="White" 

adjlist={} 

def addno(A,B): 
    global adjlist 
    adjlist[A]=B 

S=NODE() 
R=NODE() 
V=NODE() 
W=NODE() 
T=NODE() 
X=NODE() 
U=NODE() 
Y=NODE() 

addno(S,R) 

for keys in adjlist: 
    print keys 

私はコードが{「S」:R}を印刷したい最後の行ではなく、それはこれを印刷している:

<__main__.NODE instance at 0x00000000029E6888> 

誰もが私が間違って何をやっている私を導くことはできますか?また、addnode(S、E)のような別の関数呼び出しを追加したい場合は、{S:[R、E]}

答えて

2

あなたはノードにラベルを印刷する必要があります。変数名だけを使うことはできません。ノードはあなたの変数の名前を知らない。

class NODE: 
    def __init__(self, name): 
     self.name=name 
    def __repr__(self): 
     return self.name 

adjlist={} 
def addno(A,B): 
    global adjlist 
    adjlist[A]=B 

S=NODE('S') 
R=NODE('R') 
addno(S,R) 

print adjlist  
>>> {S: R} 

しかしPythonの辞書には、各キーの値を1つだけ持つことが、あなたが同時に{S: R}{S: V}を保存することができ文句を言いません。代わりに、ノードの配列を保存する必要があります:

class NODE: 
    def __init__(self, name): 
     self.name=name 
    def __repr__(self): 
     return self.name 

adjlist={} 
def addno(A,B): 
    global adjlist 
    if A not in adjlist: 
     adjlist[A] = [] 
    adjlist[A].append(B) 

S=NODE('S') 
R=NODE('R') 
V=NODE('V') 
W=NODE('W') 
addno(S,R) 
addno(S,V) 
addno(R,W) 

print adjlist 
{S: [R, V], R: [W]} 

不都合なグローバル変数を使用することは悪い習慣です。代わりに、グラフのクラスを作る:うまく働い

class Node: 
    def __init__(self, name): 
     self.name=name 
    def __repr__(self): 
     return self.name 

class Graph: 
    def __init__(self): 
     self.adjlist={} 
    def addno(self, a, b): 
     if a not in self.adjlist: 
      self.adjlist[a] = [] 
     self.adjlist[a].append(b) 
    def __repr__(self): 
     return str(self.adjlist) 

G=Graph() 
S=Node('S') 
R=Node('R') 
V=Node('V') 
W=Node('W') 
G.addno(S,R) 
G.addno(S,V) 
G.addno(R,W) 

print G 
>>> {R: [W], S: [R, V]} 
+0

おかげで、私はキーに複数の値を追加しますどのように多くの最後の質問(その辞書を使用している) –

+0

は私の編集をチェックし、私はちょうど感謝をたくさん働い –

+0

を作りました –

0

のように呼び出す必要があります。Nodeはクラスのインスタンスですあなた自身のプログラムの出力を参考にしてください:<main.NODE instance at 0x00000000029E6888>)。

私はあなたがadjacency listのグラフアルゴリズムを実装しようとしていると思います。そのような場合は、ほとんどの場合colorと「距離to otherノード」が必要になります。

for keys in adjlist: 
    print keys.colournode , keys.distance 
関連する問題