我有一個僱員層次結構樹,我想爲其應用顏色。我只能使用最多10種顏色,因爲更多的顏色會讓用戶感到困惑。我可以使用什麼邏輯或算法來爲樹着色一組顏色?有沒有一些技巧如何做到這一點? 我最初的想法是通過做一個BFS在樹中找到10個子樹,然後以不同的方式給它們着色。如果在第一級本身有10個以上的孩子,則不要使用任何顏色,如果有10個節點,則繼續往下直到找到10個子樹進行着色。這是看待這個問題的正確方法嗎? 艾米更多的想法?如何使用固定顏色對樹節點着色?
-1
A
回答
1
你想每個相鄰的節點是不同的顏色?父母不同於他們所有的孩子和兄弟姐妹彼此不同?隨着顏色,否則隨機分配?
舊的代碼沒有達到我對它的要求,所以我寫了一個更好的代碼版本,因爲它是迭代的。我更滿意的是,它滿足了我上面所述的描述。
如果是,則與集合中的所有顏色
C
的開始時,挑一個父讓調用一個P
每個孩子從左到右顏色出來的一套C - {S,P}
,其中S
是顏色這個節點的左兄弟節點。對於每個設置爲C - D
的孩子重複此操作,其中D是此孩子的顏色,但您已選擇該節點的顏色。
大多認爲仍然是正確的,但不是深度優先遞歸我切換到迭代級別序遍歷:
import random
class Node(object):
def __init__(self, children):
self.children = children
self.color = None
def __str__(self):
return '<node {}>'.format(self.color) + ' '.join(str(c) for c in self.children) + '</node>'
def pick(s):
return random.choice(list(s))
def assign_colors(node, set_of_colors):
node.color = pick(set_of_colors)
level = [node]
while level:
left_sibling = set()
_level = []
for node in level:
for child in node.children:
_level.append(child)
child.color = pick(set_of_colors - (set([node.color]) | left_sibling))
left_sibling = set([child.color])
level = _level
test = Node([Node([Node([Node([]), Node([]), Node([]), Node([])]),
Node([Node([]), Node([])]), Node([]), Node([])]),
Node([Node([]), Node([]), Node([]), Node([])]), Node([])])
assign_colors(test, set([1,2,3,4]))
print test
assign_colors(test, set([1,2,3,4,5]))
print test
以下是格式化輸出。請注意,沒有孩子與其父母具有相同的顏色,也沒有與左邊的同一級別上的左兄弟姐妹或孩子具有相同的顏色。
<node 3>
<node 4>
<node 2>
<node 4></node>
<node 1></node>
<node 4></node>
<node 1></node>
</node>
<node 1>
<node 4></node>
<node 3></node>
</node>
<node 3></node>
<node 1></node>
</node>
<node 1>
<node 2></node>
<node 3></node>
<node 2></node>
<node 4></node>
</node>
<node 2></node>
</node>
<node 4>
<node 2>
<node 1>
<node 5></node>
<node 4></node>
<node 2></node>
<node 4></node>
</node>
<node 5>
<node 3></node>
<node 2></node>
</node>
<node 4></node>
<node 3></node>
</node>
<node 5>
<node 1></node>
<node 4></node>
<node 2></node>
<node 3></node>
</node>
<node 1></node>
</node>
任何樹最多可以用3種顏色着色(更多隻是使它更加豐富多彩)。考慮:
1
/ | \
2 3 2
/| \
1 3 1 3
/| \
3 2 3 2
這將是斑馬條紋表的樹等價物。特此我將此名稱爲斑馬條紋樹。
相關問題
- 1. Java樹節點着色
- 2. 如何着色節點?
- 3. OpenGL使用着色器定義顏色
- 4. 顏色節點
- 5. 如何使用着色器改變點的顏色
- 6. 更改樹節點的字體顏色
- 7. 6顏色圖頂點着色算法
- 8. 使用着色器改變顏色
- 9. 使用替代顏色着色表
- 10. 如何通過HSL顏色着色?
- 11. 如何讓着色器淡入顏色?
- 12. 如何着色UIBarButtonItem背景顏色?
- 13. 顏色樹節點與2種顏色,但不是通過用戶
- 14. GraphML節點着色Prefuse
- 15. ArangoDB Webinterface - 着色節點
- 16. Python Plotly圖書館的網絡:如何爲不同顏色的節點着色
- 17. 如何在虛擬字符串樹節點上添加顏色?
- 18. D3.js顏色節點界使用spectrum.js
- 19. 如何通過着色器管道傳遞頂點顏色?
- 20. 搜索欄着色顏色
- 21. 如何爲一個半藍色半黃色的顏色着色?
- 22. opengl着色器使顏色「消失」
- 23. 如何在d3js中按不同組對顏色鏈接着色
- 24. 更改treeview節點顏色
- 25. igraph中的顏色特定節點
- 26. 爲散點圖圖使用固定顏色集
- 27. 如何使用無邊框的一種顏色對一行着色?
- 28. 着色器程序到節點+片段着色器
- 29. 以特定顏色對LaTeX背景的前15%進行着色?
- 30. 調用着色器顏色有效