令人惊讶的是,我们在图形着色方面还没有遇到任何挑战!
给定一个无向图,我们可以为每个顶点赋予一种颜色,使得没有两个相邻的顶点共享相同的颜色。实现此目的所需的最小数量的独特颜色χ被称为图形的色数。
例如,以下显示使用最少数量的颜色的有效着色:
(在维基百科上找到)
因此,该图的色数为χ= 3。
编写一个程序或函数,给定多个N <16的顶点(从1到N),并给出一个边列表,确定一个图的色数。
只要输入未经过预处理,您就可以接收输入并以任何方便的格式产生输出。也就是说,您可以使用字符串或数组,可以在字符串中添加方便的定界符,也可以使用嵌套数组,但是无论您做什么,扁平化的结构都应包含与以下示例相同的数字(顺序相同)。
您可能不使用内置的图论相关功能(如Mathematica的ChromaticNumber
)。
您可能会认为该图没有环(将顶点与其自身连接的边),因为那样会使该图不可着色。
这是代码高尔夫球,最短的答案(以字节为单位)获胜。
例子
您的程序必须至少在合理的时间内解决所有这些问题。(它必须正确解决所有输入,但是较大的输入可能需要更长的时间。)
为了缩短篇幅,在以下示例中,我在一个逗号分隔的列表中显示了边缘。如果愿意,您可以换行或使用一些方便的数组格式输入。
三角形(χ= 3)
3
1 2, 2 3, 1 3
6个顶点的“环”(χ= 2)
6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1
5个顶点的“环”(χ= 3)
5
1 2, 2 3, 3 4, 4 5, 5 1
上面的示例图片(χ= 3)
6
1 2, 2 3, 3 4, 4 5, 5 6, 6 1, 1 3, 2 4, 3 5, 4 6, 5 1, 6 2
上面关于7个顶点的一般化(χ= 4)
7
1 2, 2 3, 3 4, 4 5, 5 6, 6 7, 7 1, 1 3, 2 4, 3 5, 4 6, 5 7, 6 1, 7 2
彼得森图(χ= 3)
10
1 2, 2 3, 3 4, 4 5, 5 1, 1 6, 2 7, 3 8, 4 9, 5 10, 6 8, 7 9, 8 10, 9 6, 10 7
具有5个顶点的完整图形,以及不连续的顶点(χ= 5)
6
1 2, 1 3, 1 4, 1 5, 2 3, 2 4, 2 5, 3 4, 3 5, 4 5
完整的8个顶点图(χ= 8)
8
1 2, 1 3, 1 4, 1 5, 1 6, 1 7, 1 8, 2 3, 2 4, 2 5, 2 6, 2 7, 2 8, 3 4, 3 5, 3 6, 3 7, 3 8, 4 5, 4 6, 4 7, 4 8, 5 6, 5 7, 5 8, 6 7, 6 8, 7 8
具有15个顶点的三角晶格(χ= 3)
15
1 2, 1 3, 2 3, 2 4, 2 5, 3 5, 3 6, 4 5, 5 6, 4 7, 4 8, 5 8, 5 9, 6 9, 6 10, 7 8, 8 9, 9 10, 7 11, 7 12, 8 12, 8 13, 9 13, 9 14, 10 14, 10 15, 11 12, 12 13, 13 14, 14 15