我正在尝试创建一个在图形上运行最佳边缘着色的程序。关于节点和边缘,这个简单(非多边)图形的大小可变。我在理解如何实现算法以及它的作用方面遇到了一些麻烦。我对Vizing算法的理解大多来自this来源,这非常有帮助。
据我所知,该算法分为两个主要部分:ColorGraph
和ColorEdge
函数。在上面的源代码中,Jeffrey M. Gilbert将颜色图函数的伪代码呈现如下:
ColorMultiGraph(G, k)
Initialize G' to be
V(G') = V(g)
E(G') = {}
Initialize Φ' to be an (empty) coloring E(G') with k>=0 Colors
EdgesLeft = E(G)
While EdgesLeft != {} Do
Select e from EdgesLeft
Φ' = ColorEdge(e,G', Φ')
E(G') = E(G') U {e}
EdgesLeft = EdgesLeft - {e}
End While
Return Φ'
我或多或少地了解这个伪代码发生了什么,尤其是在链接文本中相关部分的帮助下。我不明白,希望能找到一些帮助,是ColorEdge
函数。
粗略地说,它讨论了代表给定节点上缺少彩色边缘的孔。您从给定的未着色边缘列表中选择了边e
,并比较端点上的孔以确定边缘是否可以着色。这很容易理解。令我困惑的是两者之间无法匹配的情况。
您应该使用Vizing风扇序列来更改要着色的节点上的孔。我已经阅读了几次该部分,我并不真正理解它是如何工作的,特别是与传递给函数的G'
和Φ'变量一起使用时。
有人可以解释一下这部分算法到底发生了什么?我不知道如何继续它,因为我通常不明白不同部分之间发生了什么。