【问题标题】:Greedy graph coloring using networkx使用 networkx 的贪心图着色
【发布时间】:2022-11-30 18:13:43
【问题描述】:

我在下面附上了我的代码。我创建了一个完整的图并尝试使用 greedy_color() 函数,这样彼此相邻的节点就不会被分配相同的颜色。但问题是,greedy_color() 函数返回与节点相同的数字(不使用尽可能少的颜色)。我该如何解决这个问题?

 import networkx as nx
 import matplotlib.pyplot as plt
 import itertools

 net = nx.complete_graph(20)
 fig = plt.figure(figsize=(12,12))
 #nx.draw(net)

 d = nx.coloring.greedy_color(net)
 print(d)

 OUTPUT:


{
0: 0,
1: 1,
2: 2,
3: 3,
4: 4,
5: 5,
6: 6,
7: 7,
8: 8,
9: 9,
10: 10,
11: 11,
12: 12,
13: 13,
14: 14,
15: 15,
16: 16,
17: 17,
18: 18,
19: 19
}

我尝试将创建的图形作为参数传递给 greedy_color() 但输出应该给我一个字典,其中值元素是重复的,并且对于给定的键数尽可能少。 (键表示节点,值表示颜色)

【问题讨论】:

    标签: python python-3.x graph networkx graph-theory


    【解决方案1】:

    您的代码是正确的,但是完整的图形意味着每个节点都彼此相邻,因此每个节点都将具有独特的颜色。

    例如,将图形修改为不同的图形会得到以下结果:

    from networkx import greedy_color
    from networkx import karate_club_graph
    
    G = karate_club_graph()
    print(greedy_color(G))
    # {33: 0, 0: 0, 32: 1, 2: 2, 1: 1, 3: 3, 31: 2, 8: 3, 13: 4, 23: 2, 5: 1, 6: 2, 7: 4, 27: 1, 29: 3, 30: 2, 4: 1, 10: 2, 19: 2, 24: 0, 25: 1, 28: 1, 9: 1, 12: 1, 14: 2, 15: 2, 16: 0, 17: 2, 18: 2, 20: 2, 21: 2, 22: 2, 26: 1, 11: 1}
    

    【讨论】:

    • 谢谢,如果我需要创建一个具有自定义放置节点并使用 greedy_color() 的图形,我该怎么办?并使用 nx.draw() 绘制不同颜色的节点
    • 这是一个单独的问题。 :)
    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2014-05-22
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多