我正在看TopCoder上的PenLift问题,在阅读this editorial之后我现在明白了怎么做,但有一点我不明白。
一个众所周知的定理指出,要遍历连通图中的所有边需要numOfOddVertices / 2个总路径。
这是什么理论?为什么会这样呢?我的第一个想法是通过添加边来找到欧拉路径,使所有顶点具有除2之外的偶数度,因为这将允许欧拉路径。我不确定这是否正确,如果是这样,我怎么知道这是最好的方式,它似乎贪婪但我没有看到任何证据。有人可以把我链接到理论或解释它是如何工作的吗?提前致谢。
答案 0 :(得分:3)
这是什么理论?
图论。
为什么会这样呢?
我们需要假设至少有一对奇度顶点。
下界:证明具有2k个奇度顶点的图需要至少k个路径。基本情况k = 1:无关紧要。步骤k> 1:从具有2k个奇度顶点的图中移除路径,留下至少2k-2 = 2(k-1)个奇度顶点。
上限:用k个边连接奇数度顶点的成对不相交对来扩充图。现在所有顶点都具有均匀度,因此存在欧拉电路。删除此电路的新边沿; k路径仍然存在。
答案 1 :(得分:2)
在图中,奇数顶点(n)的数量始终为零或偶数。如果n = 0,您可以从任何点开始遍历整个图形。如果n> 0,要遍历图形,你应该总是从一个奇数顶点开始,你将从另一个奇数顶点结束。假设你连续绘制的路径数是K.
请阅读我的博客文章了解更多信息。 http://jeewanthad.blogspot.com/2012/11/eulerian-trail.html
答案 2 :(得分:0)
首先,原始问题中提出的方法肯定是正确的:将所有奇数顶点配对,但将两个奇偶顶点配对,在每对顶点之间添加一条边,然后计算欧拉路径。添加的边对应于最终遍历中的移动。
如果希望使笔式绘图仪等的运动最小化,请考虑以下事项:画线的运动始终等于边长的总和,因此保存运动的唯一方法是使运动最小化。添加的边缘代表移动,因此目标是以最小化添加的边缘的长度的方式对奇数顶点进行配对。这实际上是一个众所周知但相当困难的问题,称为“普通图上的最小成本完美匹配”(请注意, general 图,而不是 bipartite )。有一种称为Blossom算法的算法可以在O ^ 3的时间内解决它,但我从未找到完整算法的令人满意的描述-都相当模糊和混乱。