2012-03-20 183 views
2

我想在python中寫一個小代碼來彩色圖頂點,並計算使用的顏色數,因此沒有兩個連接的頂點具有相同的顏色。 這是我的代碼,我不知道它有什麼問題,有什麼幫助嗎? 這不是功課!頂點着色由python-色數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

在哪裏可以找到這個例子的完整源代碼,它是否打開?在此先感謝 – 2016-03-30 16:56:32

回答

0

你應該發佈你得到的錯誤,你的期望和實際發生的事情。

最低限度,這樣的:

color_of_neighbor = colors_of_nodes(neighbor) 

將引發TypeError: 'dict' object is not callable錯誤。

+0

對不起,有任何想法如何解決我的代碼?謝謝 – Python 2012-03-21 20:34:10

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)。你想做第二個。
  3. 邏輯錯誤:將鄰居設置爲邊緣值而不是節點。您想循環使用相鄰節點或特定節點。幸運的是,networkx有一個簡單的功能:G.neighbors(node)。此外,邊緣是一個set不可散列therther不能是字典鍵。
  4. 語義錯誤:您沒有使用正確的語義來創建和訪問networkx圖。看看the website for networkxG.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

我該如何執行此代碼?請幫幫我! – 2016-03-30 17:26:31

+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' – 2016-04-12 17:44:51