2012-03-20 12 views
2

私はPythonの小さなコードをグラフの頂点に色付けし、使用された色の数を数えて、接続された2つの頂点が同じ色を持たないようにしようとしています。 これは私のコードで、何が間違っているのか分かりません。 それは宿題ではありません!Pythonによる頂点の色付け - Chromatic numbers X(G)

import networkx as nx 
import matplotlib.pyplot as plt 
G=nx.Graph() 

colors = ['Red', 'Blue', 'Green', 'Yellow', 'Black','Pink','Orange','White','Gray','Purpul','Brown','Navy'] 

G.nodes = [1,2,3,4,5] 
G.edges= [{1,5},{1,3},{1,2},{1,4},{4,5}] 
colors_of_nodes={} 

def coloring(node, color): 
    for neighbor in G.edges: 
     color_of_neighbor = colors_of_nodes(neighbor) 
     if color_of_neighbor == color: 
      return False 

    return True 

def get_color_for_node(node): 
    for color in colors: 
     if coloring(node, color): 
      return color 

def main(): 
    for node in G.nodes: 
     colors_of_nodes[node] = get_color_for_node(node) 

    print colors_of_nodes 


main() 
+0

この例の完全なソースコードはどこにありますか?開いていますか?事前に感謝 –

答えて

0

あなたが得ているエラー、期待していること、実際に起こっていることを投稿する必要があります。

最低限、この:

color_of_neighbor = colors_of_nodes(neighbor) 

TypeError: 'dict' object is not callableエラーが発生します。

+0

私のコードを修正する方法については、ごめんなさい申し訳ありません?ありがとう – Python

2

複数の問題は、このコードでは、次のとおりです。

  1. 小さなスペルミスPurpul - >Purple
  2. 構文エラー:colors_of_nodesそれは関数として呼び出すことはできませんので、辞書です。したがってcolors_of_nodes(neighbor)は失敗します。辞書は、colors_of_nodes[node]またはcolors_of_nodes.get(node, default_value_if_node_is_not_a_key)という2つの方法で索引付けできます。あなたは2番目のことをしたい。
  3. 論理エラー:隣接ノードがノードではなくエッジ値に設定されています。あなたは隣人または特定のノードであるノードを巡回したいと思う。幸運にもnetworkxにはこのための単純な関数があります:G.neighbors(node)。さらに、エッジは、ハッシュ可能でないsetです。これは、辞書キーにはなりません。
  4. セマンティックエラー:networkxグラフの作成とアクセスに正しいセマンティクスを使用していませんでした。 the website for networkxを見てください。 G.add_nodes_from([1,2,3,4,5])G.add_edges_from([(1,2),(1,3),(1,4),(1,5),(4,5)])G.nodes()

は、以下の作業形式で編集したコードです。

著者 =「ブレント」これはグラフを着色するための貪欲技術であり、必ずしもあなたのグラフの最適な着色を与えないことを

import networkx as nx 
import matplotlib.pyplot as plt 
G=nx.Graph() 

colors = ['Red', 'Blue', 'Green', 'Yellow', 'Black', 'Pink', 'Orange', 'White', 'Gray', 'Purple', 'Brown', 'Navy'] 

G.add_nodes_from([1,2,3,4,5]) 
G.add_edges_from([(1,5),(1,3),(1,2),(1,4),(4,5)]) 
colors_of_nodes={} 


def coloring(node, color): 
    for neighbor in G.neighbors(node): 
     color_of_neighbor = colors_of_nodes.get(neighbor, None) 
     if color_of_neighbor == color: 
      return False 

    return True 

def get_color_for_node(node): 
    for color in colors: 
     if coloring(node, color): 
      return color 

def main(): 
    for node in G.nodes(): 
     colors_of_nodes[node] = get_color_for_node(node) 

    print colors_of_nodes 


main() 

注意。

+0

どうすればこのコードを実行できますか?お願い助けて! –

+0

これはpythonですので、matplotlibとnetworkxパッケージをrequirements.txtと 'pip install -r requirements.txt'に追加する必要があります。あなたがPythonに慣れていない(または正直なところ、Pythonで新しいものではない)場合、anacondaは良いスタート地点です。 https://www.continuum.io/downloads。 networkxリンクは投稿にあります。他に何が必要なのかわからない、 'python your_file_name.py' –

関連する問題