红色 - 黑色生成树

时间:2016-07-01 16:26:44

标签: algorithm graph

早上好,

我遇到了以下问题,处理图形并且无法提供正确的解决方案。我希望得到任何可能的帮助:

你会得到一个图表,有些边缘是黑色的,有些边缘是红色的。查找具有一个限制的生成树:如果我们将某个节点作为根,则从它到某个叶节点的每条路径必须由交替的红黑红黑边组成。也就是说,从根到叶的路径不得包含连续的黑黑边或红红边。 您可以保证存在这样的生成树。

感谢。

1 个答案:

答案 0 :(得分:0)

这可能不是最有效的解决方案,并且编写起来非常麻烦。

考虑一个图,其中每个节点都是具有给定根的树。如果B由具有一个额外边的A组成,则从一个节点A到另一B的一侧。我们可以使用BFS遍历该超图,并在找到生成树时停止。实际上,我们也可以解决没有这种树的情况。

假设您通过(1,e1,e2,b),(2,e1,e3,r),(3,e1,e4,b)定义的(id,顶点,顶点,颜色)得到图),根节点为e4。

迭代的第一个元素是(-1,e4,nil)(-1是到达节点的边的id,nil代表您从根到达的颜色) 下一次迭代我们有[(-1,e4,nil),(3,e1,b)]。 在第三次迭代中,当我们到达带有蓝色的e1时,我们只能添加[(-1,e4,nil),(3,e1,b),(2,e3,r)]

在此示例中,仅添加了一种可能的边缘。通常,我们需要跟踪给定点上所有可能的树木。

请注意,树的超图是DAG(每边都增加了一条边,经过n步后,您到达的树的边数比开始时要多)。