簡體   English   中英

為圖中的節點分配顏色,使其沒有兩個相鄰節點具有相同的顏色

[英]Assigning color to nodes in a graph such that no two neighbor nodes to it has same color

在此處輸入圖像描述

如果您看到上圖,彼此相鄰的節點沒有相同的顏色。 我使用 .networkx python 創建了一個具有跨節點對角線邊緣的網格圖,並對其應用了貪婪顏色。

greed = nx.coloring.greedy_color(G)
print(greed)

這給出了 output

{(1, 1): 0, (1, 2): 1, (1, 3): 0, (1, 4): 1, (1, 5): 0, (1, 6): 1, (1, 7): 0, (1, 8): 1, (2, 1): 2, (2, 2): 3, (2, 3): 2, (2, 4): 3, (2, 5): 2, (2, 6): 3, (2, 7): 2, (2, 8): 3, (3, 1): 0, (3, 2): 1, (3, 3): 0, (3, 4): 1, (3, 5): 0, (3, 6): 1, (3, 7): 0, (3, 8): 1, (4, 1): 2, (4, 2): 3, (4, 3): 2, (4, 4): 3, (4, 5): 2, (4, 6): 3, (4, 7): 2, (4, 8): 3, (5, 1): 0, (5, 2): 1, (5, 3): 0, (5, 4): 1, (5, 5): 0, (5, 6): 1, (5, 7): 0, (5, 8): 1, (6, 1): 2, (6, 2): 3, (6, 3): 2, (6, 4): 3, (6, 5): 2, (6, 6): 3, (6, 7): 2, (6, 8): 3, (7, 1): 0, (7, 2): 1, (7, 3): 0, (7, 4): 1, (7, 5): 0, (7, 6): 1, (7, 7): 0, (7, 8): 1, (8, 1): 2, (8, 2): 3, (8, 3): 2, (8, 4): 3, (8, 5): 2, (8, 6): 3, (8, 7): 2, (8, 8): 3, (0, 1): 2, (0, 2): 3, (0, 3): 2, (0, 4): 3, (0, 5): 2, (0, 6): 3, (0, 7): 2, (0, 8): 3, (1, 0): 1, (1, 9): 0, (2, 0): 3, (2, 9): 2, (3, 0): 1, (3, 9): 0, (4, 0): 3, (4, 9): 2, (5, 0): 1, (5, 9): 0, (6, 0): 3, (6, 9): 2, (7, 0): 1, (7, 9): 0, (8, 0): 3, (8, 9): 2, (9, 1): 0, (9, 2): 1, (9, 3): 0, (9, 4): 1, (9, 5): 0, (9, 6): 1, (9, 7): 0, (9, 8): 1, (0, 0): 3, (0, 9): 2, (9, 0): 1, (9, 9): 0}

排序后

{(0, 0): 3, (0, 1): 2, (0, 2): 3, (0, 3): 2, (0, 4): 3, (0, 5): 2, (0, 6): 3, (0, 7): 2, (0, 8): 3, (0, 9): 2, (1, 0): 1, (1, 1): 0, (1, 2): 1, (1, 3): 0, (1, 4): 1, (1, 5): 0, (1, 6): 1, (1, 7): 0, (1, 8): 1, (1, 9): 0, (2, 0): 3, (2, 1): 2, (2, 2): 3, (2, 3): 2, (2, 4): 3, (2, 5): 2, (2, 6): 3, (2, 7): 2, (2, 8): 3, (2, 9): 2, (3, 0): 1, (3, 1): 0, (3, 2): 1, (3, 3): 0, (3, 4): 1, (3, 5): 0, (3, 6): 1, (3, 7): 0, (3, 8): 1, (3, 9): 0, (4, 0): 3, (4, 1): 2, (4, 2): 3, (4, 3): 2, (4, 4): 3, (4, 5): 2, (4, 6): 3, (4, 7): 2, (4, 8): 3, (4, 9): 2, (5, 0): 1, (5, 1): 0, (5, 2): 1, (5, 3): 0, (5, 4): 1, (5, 5): 0, (5, 6): 1, (5, 7): 0, (5, 8): 1, (5, 9): 0, (6, 0): 3, (6, 1): 2, (6, 2): 3, (6, 3): 2, (6, 4): 3, (6, 5): 2, (6, 6): 3, (6, 7): 2, (6, 8): 3, (6, 9): 2, (7, 0): 1, (7, 1): 0, (7, 2): 1, (7, 3): 0, (7, 4): 1, (7, 5): 0, (7, 6): 1, (7, 7): 0, (7, 8): 1, (7, 9): 0, (8, 0): 3, (8, 1): 2, (8, 2): 3, (8, 3): 2, (8, 4): 3, (8, 5): 2, (8, 6): 3, (8, 7): 2, (8, 8): 3, (8, 9): 2, (9, 0): 1, (9, 1): 0, (9, 2): 1, (9, 3): 0, (9, 4): 1, (9, 5): 0, (9, 6): 1, (9, 7): 0, (9, 8): 1, (9, 9): 0}

但我希望它的方式是一個節點的兩個相鄰/相鄰節點不應該具有相同的顏色在此處輸入圖像描述

在上圖中,(1,4) [green] 有它的鄰居 (1,3) [red] 和 (1,5) [red]。 在這種情況下,節點 (1,4) 旁邊的兩個節點都是紅色的。 但是我想要 (1,3) 和 (1,5) 在不同的 colors 中。誰能告訴我如何解決這個問題?

我嘗試了貪婪的顏色方法 from.networkx 以這樣一種方式着色,即沒有兩個相鄰的節點具有相同的顏色。

問題是您有一個着色算法不遵守的額外約束。 您有兩個選擇:更改算法以尊重約束(硬),更改數據(圖形)以便將約束集成在其中。

第二個選項在這里很容易做到。 我們所要做的就是在不應該是相同顏色的節點(即共享一個公共鄰居的節點)之間添加邊,為圖形着色。

  1. 創建圖G的深層副本G2 由於我們將修改圖形以匹配新的約束,因此我們必須保持原始圖形不變。
  2. 對於G中的每對節點n_1n_2
    1. 如果它們相鄰,則無事可做。
    2. 如果它們在G2 G添加一條邊(n_1, n_2)
  3. 顏色G2
  4. 對於G中的每個節點,將其顏色設置為G2中相應節點的顏色

您是否嘗試過圖形着色算法?

第 1 步 - 按某種順序排列圖形的頂點。

Step 2 - 選擇第一個頂點並用第一種顏色着色。

第 3 步 - 選擇下一個頂點並使用未在與其相鄰的任何頂點上着色的最低編號顏色為其着色。 如果所有相鄰頂點都用這種顏色着色,則為其分配一種新顏色。 重復此步驟,直到所有頂點都着色。

積分: https://www.tutorialspoint.com/the-graph-coloring

暫無
暫無

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

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