我有函数three_colorability(n,E),它给出输出true(当带有这些边和顶点的图形可以用3种颜色着色时)或假(如果没有)。 (!没有参数可以知道已经着色的是什么) 我们假设此函数在线性时间复杂度下工作。
我必须使用给定函数制作给定无向图G的3着色算法,该函数将在多项式时间内工作。
我无法解决这个问题。
答案 0 :(得分:2)
按照代表的颜色添加3个名为C1
,C2
和C3
的新节点。在新节点(C1,C2)
,(C2,C3)
和(C1,C3)
之间添加边。如果three_colorability(V,E)
为真,则three_colorability(V+{C1,C2,C3},E+{(C1,C2),(C2,C3),(C1,C3)})
也为真。
对于每个(原始)顶点v
,three_colorability()
对于添加了{(v,C1), (v,C2), (v,C3)}
的两个边的至少一个图形返回true。例如。如果three_colorability()
对于添加了边{(v,C2), (v,C3)}
的图表返回true,则表示v
可以使用颜色1着色。
要查找所有顶点的颜色,请逐步查找顶点颜色并在图形中添加这两条边。