在图中查找访问所有节点的最短路径

时间:2016-04-16 13:00:16

标签: algorithm graph

我有一个带有G顶点的加权和无向图n。这些顶点中的两个是XY
我需要找到从X开始的最短路径,在Y结束并经过G的所有顶点(按任意顺序)。
我怎么能这样做?

这不是旅行商问题:我不需要只访问每个顶点一次而且我不想返回第一个顶点。

2 个答案:

答案 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)

尝试查看Dijkstra's algorithm

基本思路是过滤遍历所有节点的路由,并获得路径最短的路径。

实际上,这可能不是最佳方式。