我有一个图形顶点的“最大”度序列。现在我想构建一个树,其中每个节点都具有“最多”相应的最大程度。
例如,如果我的最大度序列是A = [3,4,2,1,4,3],那么我想制作一个包含6个顶点的树,每个顶点具有与其值相对应的“最大度”甲
到目前为止,我尝试使用顶点着色,但无法获得树,而有时我会得到一个包含周期的图。
答案 0 :(得分:0)
首先让我们回想一下有n
个顶点的树的度数的一个重要事实:总的度数总是2*(n-1)
。反过来也是如此,如果图的度和为2*(n-1)
,则图是树。实际上,给出2*(n-1)
的任何自然数序列都可以表示树的度数。
因此,您问题的一般算法应如下所示:
降低"最大度数"列出一个实际的"度列表"。
从度数列表中,使用任何图构建算法。由于度数之和,结果图将为树。
请注意:可能存在多种可能性,但最后,总边缘成本将相同,(n-1) * cost of one edge
,无论结果树是什么!
示例:
取序列A = [3,4,2,1,4,3]。总数是17.我们应该有10棵树。
让每个度数大于1减少一个。
它给出:B = [2,3,1,1,3,2]。总计是12。
让我们发现,将第一个2减一,减1;
它给出:C = [1,2,1,1,3,2]。总数为10.这是树的度数列表。
让我们画画吧。
从一度顶点开始(必须至少有两个顶点),然后通过递增度数顺序追加:
1--
1--
1--
1--2--
1--2--
1--
1--2--\
1--2---3
1-----/
抱歉,我的ASCII ART技能不是最好的。
更具体一点:我们试图贪婪地联系#34;图右侧的n-1个顶点,任意左边的顶点为n。对于最后一个应该链接剩余的内容的例外情况。
[3,3,3,1,1,1,1,1]
的例子1--
1--
1--
1--
1--
1---3
1--/
1---3
1--/
1--
1---3-\
1--/ \
1---3---3
1--/ /
1-----/