簡體   English   中英

圖着色算法(貪婪着色)

[英]Graph coloring algorithm (Greedy coloring)

我正在使用Java進行圖形着色項目。 我需要使用四色定理實現四種不同的圖着色算法。 我有一個問題,其中一個算法名為少數鄰居貪心算法

我有一個地圖,其中包含一堆多邊形對象(存儲在arraylist中)。 另外,我有一個2D布爾數組,表示不同多邊形的鄰接。

我從理論上知道算法:我有一個優先級,用於存儲我的未着色多邊形。 基於鄰接計數的隊列順序。 如果多邊形具有很少的鄰居,則認為它比具有大量鄰居的多邊形更好。 無論如何,算法應該重復從優先級中抽取多邊形並嘗試根據其鄰接對其進行着色。

不幸的是,我在實現部分遇到了問題。 我根據鄰接計數獲得了優先級,但是在為這些多邊形分配顏色時遇到了問題。 如果有人在使用這種算法,或者任何有想法的人,請與我分享。 我需要一些想法來加快實施部分。

提前致謝。

您應該准確說明實現部分需要什么樣的幫助。 “我在分配顏色時遇到問題”怎么樣?

包含存儲在數組列表中的Polygon對象的映射是否具有用於鄰接的單獨的2D布爾數組? 我假設你的多邊形是圖中的節點。

您應該構建一個Graph數據結構並進行導航。 經典的C風格方法是使用節點和邊緣的數組, 使其看起來很復雜

由於使用Composition的OOP自然會生成一個對象圖,這是一個很好的方法在這里使用。

圖形基本上由2個元素組成:節點和邊緣。

從Node類開始。 它有一個顏色,一個id和一個Edges的ArrayList。 邊緣形成2個節點之間的關系,並且可以具有權重和方向。

從輸入中創建節點和邊緣(請記住,如果新節點不存在,則創建它)。 然后通過選擇一個未標記的節點來運行最近鄰居算法 (靜態方法可能適用於此,或者您可以真正實踐現實生活並實施策略模式)。

但是要留意周期!

你聽起來像是在嘗試首先為最低度數的節點着色。 這似乎是倒退,你應該首先為最高程度的節點着色。 例如,如果有4種顏色可供選擇,3級節點將始終可以着色。

您確實意識到任何貪婪算法都可能很難找到4色,即使圖形是4可着色的。

查看Wikipedia頁面以獲取一些有用的指示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM