我有一个雇员层次结构树,我想为其应用颜色。我只能使用最多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. 调用着色器颜色有效