如何找到尽可能多的顶点访问路径?

时间:2015-06-25 02:26:43

标签: c++ graph graph-algorithm

给定一个方格(无向图),有没有办法找到一个尽可能多地访问顶点的路径。

每个顶点只能访问一次。这意味着如果存在,路径将是汉密尔顿之旅,或者是最长的路径。

图表有一些墙。 Wall是一个没有边缘连接到邻居的顶点。

我有一个解决方案(记住),但它非常类似于查找所有路径并选择第一个访问了大多数顶点。

  
      
  1. 查找路径将从给定的起始顶点到结尾访问所有邻居(无法继续)。

  2.   
  3. 回顾当前路径直到起始顶点,如果有任何顶点在当前路径之外有邻居,那么过程就像   步骤1来自找到的顶点及其新邻居。

  4.   
  5. 分析并选择最长路径(具有最多顶点)。

  6.   

我发现similar problem,无法理解@Juho是什么意思:

  

选择后到顶部(S),并尝试找到路径si-1⇝si,避开F中的顶点。如果找到路径,则将路径si-1⇝si上的顶点插入到F. / p>

我没有足够的声誉在那里添加评论。

我猜,我的解决方案会遇到性能问题。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

这更像哈密尔顿路径问题。它是NP完全的,因此您需要进行详尽的搜索。得到你的蛮力。我只能建议可以使用线程来缓解您的性能问题;在可用线程中均匀地划分起始顶点。如果您找到汉密尔顿路径,则终止,否则最长路径获胜。

算法本身只需找到所有可能的路径。我可能有一种启发式方法可以停止使用似乎会产生不良结果的路径,但这意味着解决方案可能并不总是正确的。