【问题标题】:Check if a random graph coloring is correct (Python)检查随机图形着色是否正确(Python)
【发布时间】:2019-01-20 13:52:53
【问题描述】:

所以我正在尝试一种不同的图形着色方法,我所做的基本上是为图形的节点随机分配颜色,我想要做的是,在分配这些颜色后,检查该着色是否正确(否相邻节点具有相同的颜色)换句话说,遍历节点及其各自的颜色并确保没有相邻节点具有相同的颜色。

这是我到目前为止所做的:

def approx_color(graph):
      colors = [1,2,3,4,5,6,7,8,9]
      xr = random.randint(0, len(graph.nodes))
      s_c = []
      for i in range(len(graph.nodes)):
          s_c.append(random.choice(colors))
      colored = dict(zip(graph.nodes,s_c))
      print(colored)

编辑:

“graph”变量是networkx库生成的图,graph.nodes()graph.edges()是图的节点和边的列表

【问题讨论】:

  • 这个问题不清楚。 graph 变量是什么?你想“检查”是什么意思? “着色正确”是什么意思?请查看stackoverflow.com/help/how-to-askstackoverflow.com/help/mcve。这些页面可以帮助您更好地提出问题。
  • 我编辑了我的帖子,我希望现在一切都清楚了。
  • 酷,现在很清楚你在问什么 :) 但是,仍然不清楚你的问题出在哪里。现在您需要再次遍历节点并将它们与相邻节点进行比较。

标签: python graph networkx approximation graph-coloring


【解决方案1】:

第一部分可以直接使用random.choices()

def approx_color(graph):
    colors = [1,2,3,4,5,6,7,8,9]
    s_c = random.choices(colors, k=graph.order())
    colored = dict(zip(graph.nodes(), s_c))

如果没有两个相邻的顶点颜色相同,则图形着色是正确的。 因此,您只需遍历节点并检查它们的邻居。
所以你可以定义一个函数来检查条件是否有效。

for u in graph.nodes():
    for v in graph.neighbors(u):
        if colored[u] == colored[v]:
            return False
return True

【讨论】:

  • 是的,工作正常,我并没有真正阅读太多关于 networkx 库的内容,也不知道邻居是预定义的。感谢您的回答:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多