Algorithm 最小路径-所有边至少一次

Algorithm 最小路径-所有边至少一次,algorithm,graph,graph-theory,cycle,chinese-postman,Algorithm,Graph,Graph Theory,Cycle,Chinese Postman,我有很多圈的有向图,可能是强连通的,我需要从中得到一个最小圈。我的意思是我需要得到循环,这是图中最短的循环,并且每个边至少被覆盖一次 我一直在寻找一些算法或一些理论背景,但我唯一发现的是中国邮递员算法。但这种解决方案不适用于有向图 有人能帮我吗?谢谢 编辑>>该图的所有边都具有相同的成本-例如1,我怀疑它是否是最优的,但您可以进行基于队列的搜索,前提是该图保证有一个循环。每个队列条目将包含一个表示路径的节点列表。从队列中移除元素时,将所有可能的后续步骤添加到队列中,以确保不会重新访问节点。如果最

我有很多圈的有向图,可能是强连通的,我需要从中得到一个最小圈。我的意思是我需要得到循环,这是图中最短的循环,并且每个边至少被覆盖一次

我一直在寻找一些算法或一些理论背景,但我唯一发现的是中国邮递员算法。但这种解决方案不适用于有向图

有人能帮我吗?谢谢


编辑>>该图的所有边都具有相同的成本-例如1,我怀疑它是否是最优的,但您可以进行基于队列的搜索,前提是该图保证有一个循环。每个队列条目将包含一个表示路径的节点列表。从队列中移除元素时,将所有可能的后续步骤添加到队列中,以确保不会重新访问节点。如果最后一个节点与第一个节点相同,则已找到最小循环。

请参阅本文-。这是正确的问题分类(假设没有更多限制)

如果你只是在阅读理论,请好好阅读算法设计手册中的

关键报价(定向版本的下半部分):

通过向图G添加适当的边,使其成为欧拉图,可以构造最优邮递员巡更。具体地说,我们在G中找到每对奇数次顶点之间的最短路径。在G中的两个奇数次顶点之间添加一条路径将使它们都变成偶数次,从而使我们更接近欧拉图。找到要添加到G的最短路径的最佳集合,减少了在奇数次顶点上的图中识别最小权重完美匹配,其中边的权重(i,j)是从i到j的最短路径的长度。对于有向图,这可以使用二部匹配来解决,其中顶点根据它们是否有更多的进出边进行分区。一旦曲线图是欧拉曲线,就可以使用上述程序在线性时间内提取实际周期


你要找的是“欧拉路径”。你可以在谷歌上找到足够的信息,基本的是
关于算法,有一种称为Fleury算法的算法,谷歌搜索或看看

网络完全由有向边组成的特殊情况可以在多项式时间内求解。我认为原著是-有向图问题的算法的清晰描述始于第115页(pdf第28页):

当连通图的所有边都有向且 是对称的,有一个特别简单和有吸引力的算法 正在指定Euler巡更

在有向对称连通图G中寻找Euler环的算法是首先找到G的生成树状图 任何节点n(树状图的根r除外)都可以指定 只要树冠的边缘远离n,边缘就指向n 这是最后一批订货。对于根r,为 远离r的边

van Aardenne Ehrenfest和de Bruin使用该算法来 枚举某个有向图[1]中的所有Euler旅行


我想到的第一件事是欧拉循环,但只是为了检查:每条边至少一次,或者恰好一次?不是作业,我至少需要一次,因为我没有保证我会用欧拉循环将它应用到图形上。区别在于,对于欧拉路径,你只想恰好访问每条边一次。是的,我刚刚注意到,谢谢陛下图中有两种循环->一种是访问每个顶点一次,另一种是访问每个边。。。然后应该是“哈密顿路径”。2009年7月,发表在《生物工程杂志》上的研究表明,细菌计算机可以用来解决一个简单的哈密顿路径问题(使用三个位置):)