计算python中用于为图形着色的颜色数

计算python中用于为图形着色的颜色数,python,graph,colors,count,theory,Python,Graph,Colors,Count,Theory,我需要帮助我的代码来计算用于给图形着色的颜色数 我写了一个小代码来打印颜色列表,现在我需要计算它们 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

我需要帮助我的代码来计算用于给图形着色的颜色数 我写了一个小代码来打印颜色列表,现在我需要计算它们

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
输出:

而不是这个输出,我想计数的颜色,所以结果应该是3 有什么想法或帮助吗??
提前谢谢

你一定要通读一本书。您可能还希望使用ipython或IDLE,或者其他一些您可以轻松查看对象中存在哪些方法,而无需查阅文档,这是一种简单的实验方法
dir(一些对象名称)
也能工作,但我觉得它不如在ipython中点击tab键那么方便,但是YMMV

在任何情况下,一旦有了
颜色
变量:

>>> 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

(为了确保这是您使用的颜色数量,而不是所需的最小颜色数量。)

您一定要通读一篇文章。您可能还希望使用ipython或IDLE,或者其他一些您可以轻松查看对象中存在哪些方法,而无需查阅文档,这是一种简单的实验方法
dir(一些对象名称)
也能工作,但我觉得它不如在ipython中点击tab键那么方便,但是YMMV

在任何情况下,一旦有了
颜色
变量:

>>> 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

(为了确保这是您使用的颜色数,而不是所需的最小颜色数。)

使用的最高颜色数可以通过

max(color.values())
但它们是从零开始编号的,所以你可能想要

max(color.values()) + 1
虽然这可能并不重要,但与
set
方法不同,这不需要构建所有使用颜色的列表,也不需要对每个条目进行散列


另外,
has_key
也不推荐使用。在颜色中使用
v

使用的最大颜色数可以通过

max(color.values())
但它们是从零开始编号的,所以你可能想要

max(color.values()) + 1
虽然这可能并不重要,但与
set
方法不同,这不需要构建所有使用颜色的列表,也不需要对每个条目进行散列


另外,
has_key
也不推荐使用。改为在颜色中使用
v

(我想我知道最初写这行的人,这是他的一个习惯。:-)我实际上更喜欢这里的len(set),因为它不取决于颜色选择的实现细节。(虽然这在这里不太相关,但我可以想到一些Sage图论的错误,这些错误可以追溯到某人的假设,即节点有标签[0..n-1])@DSM有趣。对我来说,这似乎是一个合乎逻辑的假设,但我确实不知道这是真的。(我想我知道最初写这篇文章的人有一条关键的行,这是他的一个习惯。:-)我实际上更喜欢这里的len(set),因为它不取决于如何选择颜色的实现细节。(虽然这在这里不太相关,但我可以想到一些Sage图论的错误,这些错误可以追溯到某人的假设,即节点有标签[0..n-1])@DSM有趣。对我来说,这似乎是合乎逻辑的假设,但我肯定不知道这是真的。