algorithm - 用最少的颜色给图表着色

标签 algorithm graph

我想给图上色,这样对于任何顶点 v1 和 v2,如果它们之间有 n 条路径:

p1 = (v1, p11,p12,v2)
p2 = (v1, p21,p22,v2 )
...
pn = (v1, pn1,pn2,v2 )

(p11,p12是路径的顶点,路径有四个顶点)

pi表示一条路径,pi1和pi2是v1和v1之间的两个顶点v<子>2

不能存在两条路径 pi 和 pj 使得 c(pi1) = c(p j1) 和 c(pi2) = c(pj2),其中 c(v) 表示顶点 v 的颜色。

简单来说,v1和v2之间的路径应该是可区分的。

我们的目标是尽量减少颜色的数量。

是否有满足上述条件的着色算法?星星着色肯定满足条件,但需要更多颜色。

最佳答案

根据我对您问题的理解,这是我的回答。您正在尝试找出可用于连接 N 2 顶点路径的最少颜色数。

尝试解决相反的问题:给定 x 颜色,您可以生成多少条独特的路径。从问题中不清楚第一个和第二个顶点是否可以具有相同的颜色,所以我将采用两种可能性:

  1. 允许相同的颜色(替换排列)

    给定 x 种颜色最多可以生成 x2 排列。所以 N 条路径至少需要 √N 种颜色。

    对于颜色 = RGB 顶点 = RR,RG,RB,GR,GG,GB,BR,BG,BB

  2. 不允许相同的颜色(没有替换的排列)

    给定 x 种颜色,可以生成最大 xP2 个排列。那是 x2-x ≥ N. 求解二次不等式会得到

    x ≥ (1 ± √(1 + 4 N))/2

    x = floor((1 + √(1 + 4 N))/2)

    对于颜色 = RGB 顶点 = RG、RB、GR、GB、BR、BG (给定 7 条路径,你需要 4 种颜色)

关于algorithm - 用最少的颜色给图表着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15962348/

相关文章:

java - 绘制图形节点的坐标算法

java - 如何在 jgraphx 的图形中制作所需形式的边缘?

algorithm - (Set of) List of sets (Cartesian product(s)) 来自对应于列表集的图

algorithm - AA 树在插入顺序上稳定吗?

algorithm - 查找给定预购的树高

PHP 在列表中查找数字的最有效方法

algorithm - 查找矩阵子矩阵的最有效方法 [matlab]

algorithm - 矩阵转置 : How this code is transposing matrix

javascript - C3.js 中的时间序列图未访问时间戳

c++ - 在 C++ 中使用 STL 创建邻接表的有效方法是什么?