图着色算法(贪婪着色)

时间:2010-12-11 03:14:43

标签: java algorithm recursion graph greedy

我正在使用Java进行图形着色项目。我需要使用四色定理实现四种不同的图着色算法。我有一个名为几个邻居贪心算法的算法有问题。

我有一张地图,里面包含一堆多边形对象(存储在一个arraylist中)。另外,我有一个2D布尔数组,表示不同多边形的邻接。

我理论上知道算法:我有一个存储我的未着色多边形的优先级。基于邻接计数的队列顺序。如果多边形具有很少的邻居,则认为它比具有大量邻居的多边形更好。无论如何,算法应该重复从优先级中抽取多边形并尝试根据其邻接对其进行着色。

不幸的是,我在实施部分遇到了问题。我根据邻接计数获得了优先级,但是在为这些多边形分配颜色时遇到了问题。如果有人在使用这种算法,或者任何有想法的人,请与我分享。我需要一些想法来加快实施部分。

提前致谢。

2 个答案:

答案 0 :(得分:2)

您应该准确说明实施部分需要什么样的帮助。 “我在分配颜色时遇到问题”怎么样?

包含存储在数组列表中的Polygon对象的地图是否具有用于邻接的单独的2D布尔数组?我假设你的多边形是图中的节点。

您应该构建一个Graph数据结构并进行导航。经典的C风格方法是使用节点和边和making it look complex的数组。

由于OOP using Composition自然会生成graph of objects,因此这是一种很好的方法。

图形基本上由2个元素组成:节点和边缘。

从Node类开始。它有一个颜色,一个id和一个Edges的ArrayList。 边缘形成2个节点之间的关系,并且可以具有权重和方向。

从输入中创建节点和边缘(请记住,如果新节点不存在,则创建它)。然后通过选择一个未标记的节点运行nearest neighbor algorithm(静态方法可能适用于此,或者您可以真正实践现实生活并实施策略模式)。

注意循环!

答案 1 :(得分:2)

你听起来像是在尝试首先为最低度数的节点着色。这似乎是倒退,你应该首先为最高程度的节点着色。例如,如果您有4种颜色可供选择,则3级节点将始终可以着色。

你确实意识到任何贪婪算法都可能很难找到4色,即使图形是4可着色的。

查看Wikipedia page以获取一些有用的指示。