2012-03-25 2 views
0

グラフの色を数えるためにコードに助けが必要です 色のリストを印刷するための小さなコードを書きました。Pythonのグラフの色を数えます

import networkx as nx 
g = nx.Graph() 
g.add_nodes_from([1,2,3,4,5]) 
g.add_edges_from([(1,2),(1,3),(1,4),(1,5),(4,5)]) 
C = set(xrange(12)) 
color = {} 

for u in g: 
    interdits = set([color[v] for v in g.neighbors(u) if color.has_key(v)]) 
    color[u] = min(C-interdits) 

print color 

出力にそれらを数える:

{1: 0, 2: 1, 3: 1, 4: 1, 5: 2} 

この出力の代わりに、結果を3にする必要がありますので、色を数えたいと思います。 アイデアや助け?? ありがとうございます

答えて

2

あなたは間違いなくPython tutorialを読む必要があります。また、ipythonやIDLEなどを使用して、ドキュメントを参照しなくてもオブジェクト内にどのメソッドが存在しているかを簡単に確認できます。これは簡単な実験方法です。 dir(some_object_name)でも動作しますが、ipythonのタブを押すほど便利ではありませんが、YMMVはありません。いずれの場合においても

、あなたはあなたのcolor変数たら:

>>> color 
{1: 0, 2: 1, 3: 1, 4: 1, 5: 2} 
>>> color.values() 
[0, 1, 1, 1, 2] 
>>> set(color.values()) 
set([0, 1, 2]) 
>>> len(set(color.values())) 
3 

(。そして、念のため、色数、これはあなた、必要な色のない最小数を使用)

1

使用した最高数の色が

max(color.values()) 

で見つけることができますが、彼らはそうあなたprobaゼロから番号付けしていますBLYそれはおそらく本当に重要ではありませんが

max(color.values()) + 1 

が、これは使用されるすべての色のリストを構築する、またはset方法とは異なり、各エントリをハッシュ必要ありませんします。

また、has_keyは推奨されていません。代わりにv in colorを使用してください。

+1

(私は元々has_key行を書いた人を知っていると思うし、彼の習慣だ:-)私は実際にはlen(set)を好む。実装の詳細に依存しないから選ばれた。 (ここではそれほど重要ではありませんが、ノードがラベルを持っていると仮定することができるいくつかのSageグラフ理論のバグを考えることができます) – DSM

+0

@DSM Interesting。それは私にとって論理的な仮定のように思えましたが、確かにそれが真実であるかどうかはわかりません。 – agf

関連する問題