我有一个带有G
顶点的加权和无向图n
。这些顶点中的两个是X
和Y
。
我需要找到从X
开始的最短路径,在Y
结束并经过G的所有顶点(按任意顺序)。
我怎么能这样做?
这不是旅行商问题:我不需要只访问每个顶点一次而且我不想返回第一个顶点。
答案 0 :(得分:3)
这个问题基本上是NP-Hard,我将给出一个证明的草图(而不是一个适当的减少),这解释了除非P = NP,否则没有多项式解决这个问题。
假设通过某种算法O(P(n))
A(G,x,y)
中解决此问题的矛盾矛盾
定义以下算法:
HamiltonianPath(G):
for each pair (x,y):
if A(G(x,y) == |V| - 1):
return true
return false
此算法解决了Hamiltonian Path Problem。
- >如果某个对
x,y
之间存在通过所有节点并且其长度正好为|V|
的路径,则表示它没有使用任何节点 顶点两次,找到的路径是哈密顿量。< - 如果存在哈密顿路径v1-> v2-> ...-> vn,则在调用时
A(G,v1,vn)
,你会发现最短的路径 长度最多为|V|-1
(并且它不能少,因为它需要 遍历所有顶点),算法将产生真。
复杂度:
算法的复杂度为O(n^2 * P(n))
,这是多项式时间。
因此,假设存在这样的算法,哈密顿路径可以在多项式时间内求解,并且因为它(哈密顿路径问题)是NP-Complete,P = NP。
答案 1 :(得分:-3)
基本思路是过滤遍历所有节点的路由,并获得路径最短的路径。
实际上,这可能不是最佳方式。