2016-11-16 21 views
0
{'a': [{'c','d'}, {'d'}  ], 
'b': [{'c','d'}, set()  ], 
'c': [set(),  {'a','b','d'}], 
'd': [{'a','c'}, {'a','b'} ], 
'e': [set(),  set()  ]} 

class Graph: 
    def __init__(self,*args): 
     self.edges = {} 

    def __le__(self,right): 
     for key, value in self.edges.items(): 
      if key not in right.items() or value not in right.items(): 
       return False 
     return True 

2つのグラフを比較するための< =演算子を定義します。 g1の意味は、g1がg2の部分グラフであり、g1に存在するすべてのノードがg2に存在し、 がg1(起点ノード、宛先ノード)に存在するすべてのエッジが存在することを意味するので、g1 < = g2の意味を定義する。 g2。 いずれのグラフgについても、g < = gはTrueと評価されます。方法を修正する方法

enter image description here

私はル機能を実行すると、それは次のエラーを生成します。

g1.edges = {'a': [{'c'},{'d'}], 'b': [{'c','d'}, set()], 'c': [set(),{'a','b'}], 'd': [{'a'},{'b'}]} 

g2.edges = {'a': [{'c'},{'d'}], 'b': [{'c','d'}, set()], 'c': [set(),{'a','b','d'}], 'd': [{'a','c'},{'b'}]} 

g3.edges = {'a': [{'c','d'},{'d'}], 'b': [{'c','d'}, set()], 'c': [set(),{'a','b','d'}], 'd': [{'a','c'},{'a','b'}], 'e': [set(),set()]} 


104 # Test <= 
111 *Error: g1 <= g1 and g2 <= g2 and g3 <= g3 raised exception; unevaluated: True 
112 *Error: g1 <= g2 raised exception; unevaluated: True 
113 *Error: g2 <= g3 raised exception; unevaluated: True 
115 *Error: g1 <= g2 raised exception; unevaluated: False 
117 *Error: g2 <= g3 raised exception; unevaluated: False 

誰かが私のル機能を修正するために私を助けることができますか?ありがとう。

+0

グラフの構造は明確ではありません。私は、ノードが近隣のリストまたは近隣のセットに関連付けられていることを期待していました。しかし、「b」とは何か:{{'c'、 'd'}、set()] ' – phynfo

+0

@phynfoこれは有向グラフなので、おそらく各ノードは一対の発信/着信アークに関連付けられています。 '' b ':[{' c '、' d '}、set()] 'は' b'が 'c'と' d'に弧を持ち、入ってくる弧がないことを意味します。 。 –

答えて

1

したがって、それは何のアイテムがコールする属性を持っていない、グラフオブジェクトです。エッジを追加するとコードバグが修正されますが、ロジックの問題が修正されないことがあります。ありがとうございました。

def __le__(self,right): 
    for key, value in self.edges.items(): 
     if key not in right.edges.items() or value not in right.edges.items(): 
     return False 
    return True 
関連する問題