我有一個僱員層次結構樹,我想爲其應用顏色。我只能使用最多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. 顏色節點
- 4. 使用着色器改變顏色
- 5. 如何着色UIBarButtonItem背景顏色?
- 6. 如何讓着色器淡入顏色?
- 7. 顏色樹節點與2種顏色,但不是通過用戶
- 8. GraphML節點着色Prefuse
- 9. ArangoDB Webinterface - 着色節點
- 10. 如何在虛擬字符串樹節點上添加顏色?
- 11. D3.js顏色節點界使用spectrum.js
- 12. 如何爲一個半藍色半黃色的顏色着色?
- 13. opengl着色器使顏色「消失」
- 14. 如何在d3js中按不同組對顏色鏈接着色
- 15. 更改treeview節點顏色
- 16. 如何使用無邊框的一種顏色對一行着色?
- 17. 以特定顏色對LaTeX背景的前15%進行着色?
- 18. 着色器程序到節點+片段着色器
- 19. 調用着色器顏色有效
- 20. Python:如何根據其程度對網絡的節點着色?
- 21. 確定是否可以使用兩種顏色對無向圖進行着色
- 22. 無法將頂點着色器中的顏色傳遞給片段着色器
- 23. 更改頂點着色器中頂點的顏色
- 24. 如何編寫通用GLSL着色器來着色對象
- 25. OpenGL固定功能着色器實現
- 26. SceneKit着色器根據基於節點的世界座標覆蓋顏色
- 27. 對着色自定義幾何體的平面着色
- 28. Ubuntu Bash的顏色 - 如何禁用顏色並使其變爲單色顏色?
- 29. GLSL:頂點着色器無片段着色片段着色器
- 30. OpenGL ES:如何用顏色着色紋理