给定有向图,什么是访问图的每个顶点的算法,只有一次。这与哈密顿循环不同,因为我不需要路径在同一个顶点开始和结束。
回溯算法 想到的一种算法是Backtracking,使用Recursion实现,在每一步,您都可以探索所有可能的连接/路径,并保留一个布尔访问数组,以确保不会多次访问任何顶点。当向后回溯时,此布尔值将设置为false(回溯中的必要步骤)。基本情况是比较访问顶点的数量,并在图中看到它与节点数匹配,在这种情况下,它将返回true。另一个基本情况是返回false,如果没有访问过所有顶点,但没有其他连接可以继续递归。
但是,时间复杂度为O(n!)
,这是不可取的。
是否有更好的算法来查找有向图的路径/遍历,它只覆盖图中的每个顶点一次。
答案 0 :(得分:2)
根据书算法简介,这个问题是NP完全的。这个问题没有多项式算法,但没有证明它不存在。因此,在最坏的情况下,您会获得指数时间复杂度。
一些笔记。 如果图形有一个叶子,那么这个叶子是路径的开始或结束。如果图形有两个叶子,那么路径必须从其中一个开始并以另一个结束。 如果图形具有三个或更多叶子,则不存在哈密顿路径。但对于一般图形,没有快速算法。