0

给定一个有向图,什么是只访问图的每个顶点一次的算法。这与哈密顿循环不同,因为我不需要在同一顶点开始和结束的路径。

回溯算法 想到的一种算法是回溯,它使用递归实现,在每一步中,您都探索所有可能的连接/路径,并保留一个布尔访问数组,以确保不会多次访问顶点。向后回溯时,此布尔值将设置为 false(回溯中的基本步骤)。基本情况是比较访问顶点的数量,并查看它是否与图中的节点数匹配,在这种情况下,它将返回 true。如果尚未访问所有顶点,但不存在其他连接以继续递归,则另一个基本情况将返回 false。

但是,这样做的时间复杂度O(n!)是不可取的。

有没有更好的算法来找到有向图的路径/遍历,它恰好覆盖图中的每个顶点一次。

4

1 回答 1

3

根据《算法简介》一书,这个问题是 NP 完全的。这个问题没有多项式算法,但没有证明它不存在。所以在最坏的情况下,你会得到指数时间复杂度。

一些笔记。如果图有一个叶子,那么这个叶子是路径的开始或结束。如果图有两个叶子,那么路径必须从其中一个开始并在另一个结束。如果图具有三个或更多叶子,则不存在哈密顿路径。但是对于一般图,没有快速算法。

于 2017-06-11T13:33:34.487 回答